簡體   English   中英

如何用一個查詢搜索多個詞?

[英]How to search for multiple words with one query?

我正在嘗試使用以下查詢進行簡單的 php 搜索。 這非常有效,但是查詢只給出第一個單詞的結果。 有沒有辦法使用單個查詢獲得所有三個單詞的組合結果?

$stmt = $pdo->prepare("SELECT * FROM walldb WHERE (wallname LIKE :searchq1 OR :searchq2 OR :searchq3) LIMIT :stat, :limt");

您需要expr like val模式expr like val重復expr like val

WHERE wallname LIKE :searchq1 OR wallname LIKE :searchq2 OR wallname LIKE :searchq3

您的原始代碼發生的情況是它被解釋為:

WHERE 
    (wallname LIKE :searchq1)
    OR (:searchq2)
    OR (:searchq3)

所以基本上最后兩個搜索詞是在布爾上下文中評估的,就好像它們是條件一樣。 如果搜索詞之一以1開頭,則將其評估為 true(並且將返回表中的所有行); 否則,如果兩者都不以1開頭,則條件為假,因此只有第一個條件起作用(這就是您所看到的)。

您不能以您顯示的方式使用OR :searchq2不是有效的 where 表達式。 您需要執行以下操作:

wallname LIKE :searchq1 OR wallname LIKE :searchq2 OR wallname LIKE :searchq3

您可能需要考慮正則表達式。 您可以將您想要的表達為:

where wallname regexp concat('^', concat_ws('|', :searchq1, :searchq2, :searchq3), '$')

假設參數中沒有特殊字符。

但是,也許您應該考慮一種正則表達式。 那么你可以將條件表達為:

where allname regexp '^abc|def|ghi$')

如果您想減少查詢執行時間,請使用 UNION ALL(要合並的部分與出現“OR”的次數一樣多)。 否則(透明和短腳本)在一行中使用所有條件 - 如上所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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