我对mysql和php查询相当新,除了基本的SELECT * FROM blah WHERE等等,所以我非常喜欢这里的东西。我试图根据天气状况和月相浏览照片。现在,天气,月相和照片存储在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);
for $ 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时,我得到匹配,但是当我添加小时时,没有结果。有没有办法获得比赛,而不会失去一小时的特异性?
答案 0 :(得分:0)
它不匹配,因为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');