我一直在考慮這個問題一段時間,它已經到了一個地步,我認爲最好問問周圍,聽聽其他人的想法。準確分頁左加入
我建立了一個存儲Mysql位置的系統。每個位置都有一個類型,一些位置有多個地址。
的表格看起來像這樣
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
所以,如果我想查詢數據庫中的10最近添加的我會像這樣的東西去:
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
,對嗎?但問題是,如果一個位置的地址超過1個,那麼限制/分頁不會令人滿意,除非我「GROUP BY l.location_id」,但是這將僅顯示每個地方的一個地址。與有多個地址的地方?
所以我想解決這個是做一個循環內的查詢的唯一途徑..像這樣的東西(僞):
$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);
}
現在即時得到的最後10個名額,但這樣做我結束至少10個查詢更多,我不認爲這有助於應用程序的性能。
有沒有更好的方法來實現我在找什麼? (準確的分頁)。
您想要返回某個位置的哪個地址(local_information記錄)?如果你能說出你想要哪一個,我們可以告訴計算機你想要哪一個。 – 2012-02-14 19:29:07