Ho pensato a questo per un po 'ed è arrivato a un punto in cui penso sia meglio chiedere in giro e ascoltare cosa pensano gli altri.Impaginazione accurata con giunzioni a sinistra
Im bulding un sistema che memorizza le posizioni su Mysql. Ogni località ha un tipo e alcune località hanno più indirizzi.
Le tabelle sembrano qualcosa di simile
location
- location_id (autoincrement)
- location_name
- location_type_id
location_types
- type_id
- type_name (For example "Laundry")
location_information
- location_id (Reference to the location table)
- location_address
- location_phone
Quindi, se ho voluto interrogare il database per il 10 più recentemente aggiunti Vorrei andare con qualcosa di simile:
SELECT l.location_id, l.location_name,
t.type_id, t.type_name,
i.location_address, i.location_phone
FROM location AS l
LEFT JOIN location_information AS i ON (l.location_id = i.location_id)
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id)
ORDER BY l.location_id DESC
LIMIT 10
Destra? Ma il problema è che se una posizione ha più di 1 indirizzo il limite/impaginazione non accadrà, a meno che io "GROUP BY l.location_id", ma che sta per mostrare solo un indirizzo per ogni posto .. cosa succede con i posti che hanno più indirizzi?
Così ho pensato l'unico modo per risolvere questo è quello di eseguire una query all'interno di un ciclo .. Qualcosa di simile a questo (pseudocodice):
$db->query('SELECT l.location_id, l.location_name,
t.type_id, t.type_name
FROM location AS l
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id)
ORDER BY l.location_id DESC
LIMIT 10');
$locations = array();
while ($row = $db->fetchRow())
{
$db->query('SELECT i.location_address, i.location_phone
FROM location_information AS i
WHERE i.location_id = ?', $row['location_id']);
$locationInfo = $db->fetchAll();
$locations[$row['location_id']] = array('location_name' => $row['location_name'],
'location_type' => $row['location_type'],
'location_info' => $locationInfo);
}
Ora Im ottenendo gli ultimi 10 posti, ma facendo che ho finire con almeno 10 query in più, e non penso che questo aiuti le prestazioni dell'app.
C'è un modo migliore per ottenere ciò che sto cercando? (impaginazione accurata).
Quale indirizzo (record_informazioni locali) si desidera restituire per un percorso? Se riesci a dire quale vuoi, possiamo dire al computer quale vuoi. –