[英]MySQL Greater Than Date Returning A Date Less Than Date Given
我在使用NOW(),CURDATE()和php date('Ym-d',strtotime('now'))時,MySQL給我的結果的日期小於今天的日期時遇到問題; 以下是我的查詢和結果
SELECT j.*
,j.id AS job_id
,c.company_name
,images.*
FROM jobs j
,companies c
,images images
WHERE j.user_id = c.user_id
AND images.user_id = j.user_id
AND j.description LIKE '%php%'
OR j.title LIKE '%php%'
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published = 1
GROUP BY j.id ASC
ORDER BY j.featured DESC
結果
start_date: 2013-12-08 end_date: 2014-01-08
是否有理由將這個結果還給我?
您可能需要將查詢中與OR
相關的部分更改為此...
AND (j.description LIKE '%php%' OR j.title LIKE '%php%')
請參閱, OR
優先級低於AND
(與+
運算符的優先級低於*
一相同)。 因此,它基本上將整個條件集合分為兩部分,如果這些部分中的任何一個通過了檢查,則使整個條件通過檢查。
您的WHERE子句中的運算符優先級可能有問題。
因為AND
優先於OR
,所以您實際上是在這樣做:
WHERE
(j.user_id = c.user_id
AND images.user_id = j.user_id
AND j.description LIKE '%php%')
OR
(j.title LIKE '%php%'
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published =1)
因此,將選擇滿足OR語句一半的任何記錄。
我猜你想這樣做:
WHERE
j.user_id = c.user_id
AND images.user_id = j.user_id
AND (j.description LIKE '%php%' OR j.title LIKE '%php%')
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published =1
我的建議是養成在所有情況下都使用括號的習慣,在這種情況下,您將像這樣混合使用運算符,因此您以及任何可能閱讀該代碼的人都清楚地知道意圖是什么。
有關MySQL中運算符優先級的更多信息,請查看以下鏈接:
https://dev.mysql.com/doc/refman/5.6/zh-CN/operator-precedence.html
AND的優先級高於OR的優先級。 這意味着不是做
SELECT j . * , j.id AS job_id, c.company_name, images . *
FROM jobs j, companies c, images images
WHERE j.user_id = c.user_id
AND images.user_id = j.user_id
AND ( j.description LIKE '%php%'OR j.title LIKE '%php%' )
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published =1
GROUP BY j.id ASC
ORDER BY j.featured DESC
好像情況更有意義。 你在表演
SELECT j . * , j.id AS job_id, c.company_name, images . *
FROM jobs j, companies c, images images
WHERE (
j.user_id = c.user_id
AND images.user_id = j.user_id
AND j.description LIKE '%php%'
)
OR
(
j.title LIKE '%php%'
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published = 1
)
GROUP BY j.id ASC
ORDER BY j.featured DESC
因此,您的錯誤日期可能來自上述查詢中where子句的第一部分。
您正在混合and和or語句,順序可能會以選擇方式改變
SELECT j . * , j.id AS job_id, c.company_name, images . *
FROM jobs j, companies c, images images
WHERE j.user_id = c.user_id
AND images.user_id = j.user_id
AND j.description LIKE '%php%'
OR (j.title LIKE '%php%'
AND j.start_date <= '2014-03-19'
AND j.end_date > '2014-03-19'
AND j.published =1)
GROUP BY j.id ASC
ORDER BY j.featured DESC
嘗試將括號放在正確的位置。 希望能奏效。 祝好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.