2012-11-03 90 views
2

您好我有以下查詢:限制到一個結果,對內部聯接表

SELECT pr.*, img.image_file, c.contract_id, c.cmin_markup, c.cmeal_plan, c.tax_include, c.civa, m.plan_name, r.room_name, r.room_id FROM contracts AS c 
INNER JOIN meal_plan AS m ON m.plan_code = c.cmeal_plan AND m.lang = '1' 
INNER JOIN room_infos AS r ON r.hotel_id = '$hid' AND r.lang = '1' 

LEFT JOIN images AS img ON img.foreign_id = r.room_id LIMIT 1 

LEFT JOIN promotions as pr ON pr.hotel_id = '$hid' AND FIND_IN_SET('c.contract_id', pr.contract_id) > 0 AND FIND_IN_SET('r.room_id', pr.room_id) > 0 AND pr.travel_start <= '$now' AND pr.travel_end >= '$now' AND pr.book_start <= '$arriving' AND pr.book_end >= '$departing' AND pr.lang='1' 
WHERE c.hotel_id = '$hid' AND c.cstart <= '$arriving' AND c.cend >= '$departing' AND c.ctype = '1'" 

我需要限制圖像表給我只有一個結果。我不確定這是否可行,或者如何才能實現這一目標。如果需要更多信息,請告訴我。這是很多表發佈。提前感謝任何幫助!

+2

圖像表與房間有什麼關係?房間是否有多個圖像? ... – codingbiz

+0

是一個房間可以有多個圖像 – liveandream

回答

2

通過您的查詢的末尾包括一組。假設你的圖像表有一個ID字段,只需附加「GROUP BY images.id」

+0

我簡單地添加了foreign_id,它工作完美!謝謝! – liveandream

0

我沒有在我面前的MySQL實例來嘗試這一點,但考慮運動圖像爲子查詢:

LEFT JOIN (select * from images LIMIT 1) AS img on img.foreign_id = r.room_id 

這當然不是對自己非常有效率,因爲沒有where子句中內聯子查詢,您可以改進子查詢以進一步限制,並使其與父查詢連接。

事情是這樣的:

select * from images as img2 where img2.foreign_id = r.room_id LIMIT 1 
+0

感謝您回答...這不會返回任何圖像。 – liveandream

相關問題