[英]MySQL search between 2 dates
我在查詢上遇到了一個奇怪的問題,我只是在使用2個日期進行搜索,我將數據庫中的所有日期格式化為2012-12-02 00:00:00 mysql格式,但它只是忽略了AND cslblicstat ='10'和wcxdate BETWEEN'$ date1'和'$ date2'並給我任何具有匹配類的東西。
$user = $session->username;
if(isset($_POST['carrier'])){
$carrier = $_POST['carrier'];
$class[] = $_POST['class'][0];
$date1 = $_POST['date1'];
$date1 = date("Y-m-d 00:01", strtotime($date1));
$date2 = $_POST['date2'];
$date2 = date("Y-m-d 59:59", strtotime($date2));
foreach( $class as $key){
$query = "SELECT * FROM leads WHERE class1 = '$key' OR class2 = '$key' OR class3 = '$key' OR class4 = '$key' OR class5 = '$key' OR class6 = '$key' OR class7 = '$key' OR class8 = '$key' OR class9 = '$key' OR class10 = '$key' OR class11 = '$key' OR class12 = '$key' AND user = '' AND wccompcode = '$carrier' AND cslblicstat = '10' AND wcxdate BETWEEN '$date1' AND '$date2' LIMIT 100";
$sellead = mysql_query($query)or die(mysql_error());
while($leads = mysql_fetch_array($sellead)){
$arrayl[] = $leads;
$rowid = $leads['ID'];
$update = mysql_query("UPDATE leads SET user = '$user' WHERE ID = '$rowid'")or die(mysql_error());
}
}
}
在SQL中, AND
運算符的優先級高於OR
。 我想你只需要將ORed條件放入括號中:
SELECT *
FROM leads
WHERE (class1 = '$key' OR class2 = '$key' OR ... OR class12 = '$key')
AND user = ''
AND wccompcode = '$carrier'
AND cslblicstat = '10'
AND wcxdate BETWEEN '$date1'
AND '$date2'
LIMIT 100
如果對操作符的優先級有疑問,請使用括號(或參考手冊)。
你也可以用IN
寫這個條件:
WHERE '$key' IN (class1, class2, ... , class12)
AND user = ''
---
在MySQL中,在OR之前進行評估。 所以你的WHERE子句等價於:
SELECT 1 OR 0 AND 0;
結果是這樣的:
+--------------+
| 1 OR 0 AND 0 |
+--------------+
| 1 |
+--------------+
另外,表達OR條件的語法更簡單的方法是這樣的:
WHERE '$key' IN ( class, class2, class3, ... ) AND ... ;
但是,只要你有像數字這樣的列,它的真正含義是你的架構可以改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.