繁体   English   中英

尝试使用具有不同模式的regexp在查询中两次过滤同一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM