Thay vì đọc trực tiếp bảng dịch vụ, hãy sử dụng một truy vấn phụ và tham gia vào đó.
select s.*, u.`fname`, u.`lname`, aif.`airport` FROM
( select * from services order by id limit 2) as s INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id` INNER JOIN users u
ON s.`service_provider_id` = u.`id`
Tùy thuộc vào phiên bản mysql của bạn, bạn không thể có truy vấn con IN sử dụng giới hạn và bù đắp (Phiên bản MySQL này chưa hỗ trợ 'LIMIT &IN / ALL / ANY / SOME truy vấn con') nhưng điều này sẽ vẫn hoạt động.
CHỈNH SỬA:
Nếu bạn đặt truy vấn bên trong thành:
(SELECT s.id
FROM services s
INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id`
INNER JOIN users u
ON s.`service_provider_id` = u.`id`
LIMIT 2)
Sau đó, nó sẽ chỉ trả lại các dịch vụ với Airport_in_flight và người dùng (có thể thêm một điều khoản riêng biệt).
CHỈNH SỬA để làm rõ:
Ngay bây giờ bạn có cái này làm lựa chọn của bạn:
select s.*, u.`fname`, u.`lname`, aif.`airport` FROM
services as s INNER JOIN airports_in_flight aif
ON s.`id` = aif.`service_id` INNER JOIN users u
ON s.`service_provider_id` = u.`id`
Bạn muốn giới hạn ở 2 dịch vụ (tôi không biết bạn có muốn tất cả các dịch vụ hay không, tôi chỉ đoán là những dịch vụ có người dùng và sân bay phù hợp trong chuyến bay), vì vậy bạn cần đặt giới hạn vào bảng bên phải.
Trong trường hợp này, bảng bên phải là bảng dịch vụ. Để mọi thứ trở nên đơn giản, hãy bắt đầu với phiên bản đơn giản hóa của những gì bạn có:
SELECT s.*, aif.`airport` FROM
services as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
Tôi sẽ giả định rằng có một sân bay trong hàng bay cho mọi dịch vụ (chúng ta có thể thêm độ phức tạp đó sau).
Để liệt kê 2 dịch vụ đầu tiên, chúng tôi muốn giới hạn cho các dịch vụ, không phải toàn bộ truy vấn, vì vậy nó sẽ là:
SELECT s.*, u.`fname`, u.`lname`, aif.`airport` FROM
(select * from services limit 2) as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
Lưu ý rằng tôi đã thay thế các dịch vụ bảng bằng một truy vấn, mà bây giờ tôi có thể giới hạn, đây là truy vấn con. Nếu bây giờ chúng ta chỉ muốn xem xét các dịch vụ có sân bay đang bay, chúng ta cần thay đổi truy vấn con đó từ:
select * from services limit 2
đến
select ss.* from services ss
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id` limit 2
Tôi đã đổi tên các dịch vụ và bảng airport_in_flight là ss và aifs để chúng không xung đột với tên trong truy vấn chính, hãy đặt một liên kết bên trong để giới hạn các hàng của tôi chỉ có bảng dịch vụ và bị giới hạn bởi 2, vì vậy hãy đặt truy vấn con vào truy vấn bây giờ chúng tôi nhận được:
select s.*, u.`fname`, u.`lname`, aif.`airport`
FROM
(select ss.* from services ss
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id`
limit 2) as s
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`
Sau đó, bạn có thể mở rộng truy vấn con để thêm liên kết bên trong cho người dùng (do đó chỉ giới hạn dịch vụ ở những dịch vụ có hàng Airport_in_flight và hàng người dùng) và thêm bảng người dùng vào truy vấn chính.