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