簡體   English   中英

具有多種條件但結果有限的MySQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM