[英]Trying to filter same column twice in query using regexp with different patterns
除了基本的SELECT * FROM等等之外,我对mysql和php查询还相当陌生,所以我很想在这里挂断电话。 我正在尝试根据天气状况和月相浏览照片。 现在,天气,月相和照片存储在3个不同的表中,所有3个存储日期都不同。 这是我无法控制的天气和月相,因为它们基于第三方API。
无论如何,这是我当前的查询:
$pics = "SELECT * FROM photos WHERE cam_id IN ($cams)";
if($moon == 1){ $pics .= " AND photo_date REGEXP '$phase_dates'";}
if($cond == 1){ $pics .= " AND photo_date REGEXP '$cond_dates'";}
$ phase_dates和$ cond_dates的数据都是使用以下代码的内爆数组:
$cond_dates = implode("|",$cond_date);
$phase_dates = implode("|",$phase_date);
唯一的区别是$ cond_dates需要更具体,因为天气条件每20分钟跟踪一次,而月相则每天一次。 因此,我使用:
date('Y:m:d H', $cdate);
为$ cond_date,我使用:
date('Y:m:d',$pdate);
为$ phase_date。
对于条件返回2016:11:16 09,对于阶段返回2016:11:16。 我的查询最终像:
$pics = "SELECT * FROM photos
WHERE cam_id
IN ($cams)
AND photo_date REGEXP '2016:11:16|2016:11:17'
AND photo_date REGEXP '2016:11:16 09|2016:11:16 10|2016:11:17 09'";
但是即使匹配,也没有结果。 当两个日期集都使用Y:m:d时,我得到匹配,但是当加上小时时,没有结果。 有没有办法获得比赛而又不失去小时的特殊性?
不会匹配,因为photo_date不会同时是2016:11:16和2016:11:17。 您需要在这里使用OR
运算符。 因此查询如下所示:
SELECT * FROM photos
WHERE cam_id
IN ($cams)
AND (photo_date REGEXP '2016:11:16|2016:11:17'
OR photo_date REGEXP '2016:11:16 09|2016:11:16 10|2016:11:17 09');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.