2016-12-20 7 views
0

私は基本的なSELECT *を超えたmysqlとphpクエリにはかなり新しくなっています。私は気象条件と月の位相に基づいて写真を閲覧しようとしています。今は、天気、月間、写真は3種類のテーブルに保存されています。これは、第三者のAPIをベースにしているため、気象と月の段階では制御できません。異なるパターンのregexpを使用して同じ列を2回フィルタリングしようとしています

はとにかく、ここに私の現在のクエリがあります:

$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分ごとに追跡されるため、より具体的ですが、月面は1日1回です。 $のcond_dateため

date('Y:m:d H', $cdate); 

を、そして私が使用します:そのため、私が使用して$のphase_dateため

date('Y:m:d',$pdate); 

条件では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

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'); 
+0

日付の後に時間が追加されていない場合は、ANDが動作します。また、私は両方の条件に一致する写真を探しているので、主にANDを使用する必要があります。 –

関連する問題