Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将WHERE子句添加到内部联接_Php_Mysql_Inner Join_Where Clause - Fatal编程技术网

Php 将WHERE子句添加到内部联接

Php 将WHERE子句添加到内部联接,php,mysql,inner-join,where-clause,Php,Mysql,Inner Join,Where Clause,我有一个查询,应该从每个后端酒店id开始日期和包装供应商中选择每个人税后的最低价格,并且在我添加WHERE子句之前,这似乎一直有效 问题是: SELECT e.price_per_pax_after_tax, e.hotel_score, e.package_id, e.package_type FROM packages_sorted_YQU e INNER JOIN ( SELECT db_id, MIN( price_per_pax_after_tax ) AS lowest_pric

我有一个查询,应该从每个
后端酒店id
开始日期
包装供应商
中选择每个人税后的最低
价格
,并且在我添加WHERE子句之前,这似乎一直有效

问题是:

SELECT e.price_per_pax_after_tax, e.hotel_score, e.package_id, e.package_type
FROM packages_sorted_YQU e
INNER JOIN (
  SELECT db_id, MIN( price_per_pax_after_tax ) AS lowest_price, package_id, hotel_score
  FROM `packages_sorted_YQU`
  WHERE `package_type` IN ('9', '10', '18') 
  AND `package_duration` IN ('6', '8', '12')
  GROUP BY 
    `date_start` , `package_supplier` , `backend_hotels_id`
) AS j 
ON j.db_id = e.db_id
AND j.lowest_price= e.price_per_pax_after_tax
AND j.hotel_score = e.hotel_score
AND j.package_id = e.package_id;
表格很大,但列出的所有字段都是INT,除了
date\u start
是date

导致问题的where子句是:

WHERE `package_type` IN ('9', '10', '18') 
AND `package_duration` IN ('6', '8', '12')

如果没有where子句,我会得到400多个结果,而使用where子句,我会得到零个结果:(非常感谢您的帮助。

如果您的列
package\u type
package\u duration
int
类型,那么您不必像字符串一样将值包装在

SELECT e.price_per_pax_after_tax, e.hotel_score, e.package_id, e.package_type
FROM packages_sorted_YQU e
INNER JOIN (
  SELECT db_id, MIN( price_per_pax_after_tax ) AS lowest_price, package_id, hotel_score
  FROM `packages_sorted_YQU`
  WHERE `package_type` IN (9, 10, 18) 
  AND `package_duration` IN (6, 8, 12)
  GROUP BY 
    `date_start` , `package_supplier` , `backend_hotels_id`
) AS j 
ON j.db_id = e.db_id
AND j.lowest_price= e.price_per_pax_after_tax
AND j.hotel_score = e.hotel_score
AND j.package_id = e.package_id;
子查询:

  SELECT db_id
       , MIN( price_per_pax_after_tax ) AS lowest_price
       , package_id
       , hotel_score
  FROM `packages_sorted_YQU`
  WHERE `package_type` IN ('9', '10', '18') 
  AND `package_duration` IN ('6', '8', '12')
  GROUP BY 
       `date_start` 
     , `package_supplier` 
     , `backend_hotels_id`
将产生不确定的结果,有或没有
WHERE
子句。因为您是按
date\u start、package\u supplier、backend\u hotels\u id
分组的,并且在
SELECT
列表列中没有任何聚合函数:
db\u id、package\u id、hotel\u score

如果
(开始日期、包装供应商、后端酒店id)
是主键或唯一键,则此查询应始终有效


哪个是表的
主键
,还有其他
唯一的
键吗?

大家好,谢谢你们的宝贵意见。我不需要子查询就解决了这个问题,而且速度也快了一点

SELECT MIN
(
    concat
    (
        LPAD(`price_per_pax_after_tax` , 5, '0'),
        LPAD(`package_id` , 12, '0'),
        LPAD(`hotel_score` , 7, '0')
    )
) AS cat
FROM `packages_sorted_YQU`
WHERE `package_type` IN
(
    9, 10, 18
)
AND `package_duration` IN
(
    6, 7, 8
)
GROUP BY `date_start` , `package_supplier` , `backend_hotels_id`
然后,在PHP中,我用以下方法将连接分解:

while($r=mysql_fetch_array($q,MYSQL_ASSOC))
{
    $a[lrp][] = intval(substr($r[cat], 0, 5));
    $a[package_id][] = intval(substr($r[cat], 5, 12));
    $a[hotel_score][] = substr($r[cat], 17, 7);
}

我很幸运,唯一的浮动值是
酒店评分
,所以我把它放在最后-另外两个是INT类型

确保具有这些ID的包类型和持续时间确实存在?您希望得到多少结果?您需要多少结果来获取包类型和包持续时间至少存在于一个in参数中每个字段的ters。例如,package_type 10和package_duration 12-根据我的电子表格,我应该得到至少200个结果。最后,您所拥有的是
从package_sorted_YQU中选择*FROM package_type In(9、10、18)和package_duration In(6、8、12)
。运行此查询以确保有实际匹配的行。