[英]MySQL Query with multiple conditions but limited results
我有一個PHP腳本,可從我們的MySQL數據庫創建RSS提要。 數據庫中的記錄涵蓋三年的時間。
我一直在更改MySQL查詢,在這里搜索以解決問題后,至少現在返回了結果,但是無論我為查詢中的記錄數設置了多少限制,它都只能帶來幾個月的結果。
這是查詢:
$mysqli->query("
SELECT *
FROM news
WHERE (`title` LIKE '%red%'
OR `title` LIKE '%green%'
OR `title` LIKE '%blue%'
OR `title` LIKE '%yellow%'
OR `title` LIKE '%black%')
AND published = 1
AND category_id != 9
AND category_id != 10
ORDER
BY id DESC LIMIT $news_number")
$ news_number設置為200,但我嘗試使用更高的數字進行操作,結果數量未發生變化。
因此,舉個例子,如果我在上面運行查詢,我會得到許多結果,但少於限制,它會在11月初停止顯示。
但是,如果我僅使用一個詞(例如藍色)進行LIKE搜索,則可以返回一年以上的更多結果。
我的問題是MySQL查詢看起來是否正確-已經嘗試了很多事情,但是盡管花費了很多時間卻似乎無法正確執行。
提前致謝
添加:
因此,澄清一下是否以該查詢為例,我得到了200條結果:
$mysqli->query("SELECT * FROM news WHERE `title` LIKE '%red%' AND
published='1' AND category_id !='9' AND category_id !='10'
ORDER BY id DESC LIMIT $news_number")
但是,如果我在OR部分中使用紅色運行此查詢,則將得到35個結果:
$mysqli->query("SELECT * FROM news WHERE (`title` LIKE '%red%' OR `title` LIKE '%green%' OR
`title` LIKE '%blue%' OR `title` LIKE '%yellow%' OR `title` LIKE '%black%') AND
published='1' AND category_id !='9' AND category_id !='10'
ORDER BY id DESC LIMIT $news_number")
在第二個代碼中,除非代碼錯誤,否則我期望得到200多個結果?
多虧了這些建議-更新了以下結果:
為了測試flynorc所提到的,我更改了查詢,使其顯示如下:
("SELECT * FROM news WHERE title REGEXP 'red|green|blue|yellow|black' AND published='1' AND category_id !='9' AND category_id !='10' ORDER BY id DESC LIMIT $news_number")
結果是它返回的結果數量與我的相同(上面的原始第一個結果),並且返回的結果在11月初停止。
因此,我刪除了LIMIT $ news_number,結果數沒有變化。
因此,我再次將查詢更改為如下所示:
("SELECT * FROM news WHERE title REGEXP 'red|green' AND published='1' AND category_id !='9' AND category_id !='10' ORDER BY id DESC")
隨着記錄在今年3月停止,它帶來了更多的結果-盡管它的記錄可以追溯到3年,但仍然不是整個數據庫。
為了澄清標題字段-其中包含具有我要匹配的完整單詞的標題,並且有很多標題應匹配。 我的意思是我不是真的在尋找帶紅色的詞,我只是想將其與紅色的詞匹配
抱歉,如果我的解釋不出色-這讓我感到非常困惑。 在此階段,我可以看到獲得更多結果的唯一方法是運行兩個腳本,並將查詢分解為較短的腳本。
查詢中的問題是彎括號,您還需要在其他查詢中為LIKE條件添加它們。
下面的兩個查詢看起來很相似,但是看起來很近,我為其中一個添加了像您這樣的大括號(),因此它們會產生不同的輸出。 第二個是正確的。
因此,在使用LIKE條件將其與sql查詢中的其他條件隔離時,我們需要使用彎括號。
SELECT * FROM test WHERE str LIKE '%red%' OR str LIKE '%green%' OR str LIKE '%blue%' OR str LIKE '%yellow%' OR str LIKE '%black%' AND id=1;
SELECT * FROM test WHERE (str LIKE '%red%' OR str LIKE '%green%' OR str LIKE '%blue%' OR str LIKE '%yellow%' OR str LIKE '%black%') AND id=1;
sql小提琴:: http://sqlfiddle.com/#!9/d262b8/2
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.