Php 使用左联接从其他表获取最低价格
我从两个表中获取数据,tour和tour_price使用左联接,但从定价表中无法获取最低价格 这是我的问题Php 使用左联接从其他表获取最低价格,php,jquery,mysql,join,left-join,Php,Jquery,Mysql,Join,Left Join,我从两个表中获取数据,tour和tour_price使用左联接,但从定价表中无法获取最低价格 这是我的问题 SELECT t1.id,t1.tour_title,t2.price FROM tours t1 LEFT JOIN tour_dates t2 ON t1.id=t2.tour_id WHERE t1.status = '1' AND ( t2.price between 40 AND 100 ) GROUP BY t2.tour_id ORDER BY t2.price D
SELECT t1.id,t1.tour_title,t2.price
FROM tours t1
LEFT JOIN tour_dates t2 ON t1.id=t2.tour_id
WHERE t1.status = '1' AND ( t2.price between 40 AND 100 )
GROUP BY t2.tour_id
ORDER BY t2.price DESC
我想我需要一些小的改变,但我想不出来
请提供一些帮助。
谢谢。编辑:
这个答案适用于MS SQL,而不是MySQL。Thanx Barmar的评论
尝试在t2.price上使用MIN()
函数
除MIN()之外,您还需要根据您选择的值进行分组,因为它是一个
应该是:
SELECT t1.id, t1.tour_title, MIN(t2.price) min_price
FROM tours t1
LEFT JOIN tour_dates t2 ON t1.id = t2.tour_id AND t2.price BETWEEN 40 AND 100
WHERE t1.status = '1'
GROUP BY t1.id
ORDER BY min_price DESC
- 使用
获取最低价格MIN(t2.price)
- 由于您使用的是
,第二个表中的条件应该放在LEFT JOIN
子句中。否则,没有任何匹配日期的旅行将被过滤掉,因为on
将为t2.price
NULL
- 不要使用
中第二个表中的列,因为如果不匹配,则该列将为groupby
。然后,所有没有日期的旅行将被分组在一起作为一个结果,这不是您通常想要的结果NULL
内部连接
,而不是左连接
。如果您对差异感到困惑,请参阅
在您的选择行中使用Barmar的注释MySQL不要求您将所有其他列都放在
分组依据中。如果t1.id
是唯一的id,通常情况下,按t1.tour\u title
分组是多余的。哦,糟糕,我像mssql
一样阅读标签,而不是mysql
。我会更新我的答案。谢谢你的建议Barmar先生,最后一个建议,我还有其他条件,比如评级和便利性,那么这些条件是否应该像你建议的那样出现在ON子句中?如果它们是tour_dates
表中的标准,它们应该出现在ON
子句中。如果它们是巡演
表中的标准,那么它们应该位于中的位置
。这很容易理解:如果没有匹配的巡演日期
,那么该表中的所有内容都将为空
,并且与空
的所有比较都是假的(当然,为空
除外)。
SELECT t1.id, t1.tour_title, MIN(t2.price) min_price
FROM tours t1
LEFT JOIN tour_dates t2 ON t1.id = t2.tour_id AND t2.price BETWEEN 40 AND 100
WHERE t1.status = '1'
GROUP BY t1.id
ORDER BY min_price DESC