php - MySQL Select 与动态 where 子句不同

标签 php mysql

我有一个解析器可以根据表单输入创建动态查询,但现在我需要在字段 backend_hotels_id 上选择 DISTINCT但仍然返回整行(即 SELECT * 会做什么)

我的动态查询之一如下:

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;

以上查询按预期返回三整行,但全部来自同一家酒店。

我想保持两列( deal_scoredate_start )的顺序,并返回具有唯一 backend_hotels_id 的记录中的整行。

我读到here “WHERE 子句的条件一次仅适用于一行。为了检查两行,您必须使用 JOIN”

在某些情况下,我在 9 列(上图)和 22 列之间有一个 where 子句。由于整个查询是动态创建的,我是否必须为每种可能性创建场景?或者有更简单的方法吗?

最佳答案

未经测试

你可以尝试这样的事情:

CREATE TEMPORARY TABLE TempTable
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'
;


SELECT * 
FROM TempTable
WHERE
  `deal_score` = (SELECT MAX(t1.deal_score) FROM TempTable AS t1 WHERE t1.backend_hotels_id = TempTable.backend_hotels_id )
      AND `date_start` = (SELECT MAX(t2.date_start) FROM TempTable AS t2 WHERE t2.backend_hotels_id = TempTable.backend_hotels_id )
    LIMIT 0,3;

DROP TEMPORARY TABLE TempTable; 

PS:根据您的数据和索引,您也可以使用子查询来完成此操作,而无需考虑获得更好的性能。

关于php - MySQL Select 与动态 where 子句不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9007533/

相关文章:

php - Laravel 数据库备份失败

android - 使用 Android 连接到本地服务器

MySQL:将值分组为多个字段作为列表

mysql - 分组依据不能正确处理订单

php - 敏捷性测试返回页面未找到错误

php - 不要写入空数组字段

php - 在 WooCommerce 管理订单项目上显示产品自定义字段也适用于可变产品

PHP MySQL & AJAX 搜索过滤时间延迟

mysql - 删除mysql中两个表之间的重复项

MySQL:@变量与变量。有什么不同?