Tôi đã suy nghĩ về điều này một thời gian và nó đã đến một điểm mà tôi nghĩ tốt hơn là nên hỏi xung quanh và lắng nghe những gì người khác nghĩ.Đánh số chính xác với sự tham gia trái
Im phình hệ thống lưu trữ vị trí trên Mysql. Mỗi vị trí đều có một loại và một số vị trí có nhiều địa chỉ.
Các bảng giống như thế này
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
Vì vậy, nếu tôi muốn truy vấn cơ sở dữ liệu trong 10 gần đây nhất thêm tôi sẽ đi với một cái gì đó như thế này:
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
Phải không? Nhưng vấn đề là nếu một địa điểm có nhiều hơn 1 địa chỉ giới hạn/pagination sẽ không được accurrate, trừ khi tôi "GROUP BY l.location_id", nhưng điều đó sẽ chỉ hiển thị một địa chỉ cho mỗi địa điểm. với những địa điểm có nhiều địa chỉ?
Vì vậy, tôi nghĩ rằng cách duy nhất để giải quyết điều này bằng cách thực hiện một truy vấn bên trong một vòng lặp .. Một cái gì đó như thế này (giả):
$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);
}
Bây giờ im nhận được 10 địa điểm cuối cùng, nhưng bằng cách làm mà tôi kết thúc với ít nhất 10 truy vấn nhiều hơn và tôi không nghĩ điều đó sẽ giúp hiệu suất ứng dụng.
Có cách nào tốt hơn để đạt được những gì tôi đang tìm kiếm không? (phân trang chính xác).
Địa chỉ nào (bản ghi địa phương_information) bạn muốn trả lại cho một địa điểm? Nếu bạn có thể nói cái nào bạn muốn, chúng tôi có thể nói với máy tính bạn muốn cái nào. –