我有一个解析器来创建基于表单输入的动态查询,但现在我需要在字段backend_hotels_id
上选择DISTINCT,但仍然返回整行(即SELECT *会做什么)MySQL Select distinct with dynamic where子句
我的一个动态的查询如下:
SELECT * FROM `packages_sorted_YHZ` WHERE
(
`hotel_country` = 'Antigua and Barbuda'
AND `hotel_city` IN
(
'Bolans','Mamora Bay','Saint Philip','St. John\'s'
)
)OR(
`hotel_country` = 'Aruba'
AND `hotel_city` IN
(
'Oranjestad','Palm/Eagle Beach'
)
)
AND `package_type` = '9'
AND `date_start` >= '2012-1-25' AND `date_start` <= '2012-12-19'
AND `hotel_score_title` <= '4'
AND `day` IN ('1','2','3','5','6','7')
AND `package_duration` IN ('5','6','7','8','9')
AND `adults_only` = 'y'
AND `price_per_pax_after_tax` <= '10000'
ORDER BY `deal_score` DESC, `date_start` DESC
LIMIT 0,3;
上述查询返回预期3个全行,但都来自同一个酒店。
我想保持对两列(deal_score
和date_start
)的顺序和从记录与唯一backend_hotels_id
返回整个行我读here说,“在条件WHERE子句只适用于为了检查两行,你必须使用JOIN“
在某些情况下,我在9列(上)和22列之间有一个where子句。由于整个查询是动态创建的,我必须为每种可能性创建场景?还是有更简单的方法?
我认为括号中有一些错误。可能靠近'OR' –
谢谢,我已经修正了括号。实际的查询要大得多,我把它缩小了。 –
你到底在想什么?每个酒店的最高deal_score和date_start然后排序,然后是前3个,或前3个酒店的列表不超过1行? – piotrm