【问题标题】:Limiting to one result on inner join table限制在内​​连接表上的一个结果
【发布时间】:2012-11-03 02:23:59
【问题描述】:

您好,我有以下问题:

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'"

我需要限制图像表只给我一个结果。我不确定这是否可行,或者如何实现这一目标的最佳方式。如果需要更多信息,请告诉我。要发布的表格很多。提前感谢您的帮助!

【问题讨论】:

  • 图片表和房间有什么关系?一个房间是否有多个图像? ...
  • 是的,一个房间可以有多个图像

标签: mysql join limit


【解决方案1】:

在查询末尾添加一个分组依据。假设您的 images 表有一个 ID 字段,只需附加“GROUP BY images.id”

【讨论】:

  • 我只是简单地添加了foreign_id,它工作得很好!谢谢!
【解决方案2】:

我面前没有 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

【讨论】:

  • 感谢您的回答...这不会返回任何图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2012-07-08
  • 1970-01-01
  • 2011-01-17
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多