我正在製作一個成員搜索引擎,其中有一個文本字段和三個名爲interest_1,interest_2和interest_3的sql列。假設其中一位成員的專欄中有不同詞語,其中interest_1 = cat,interest_2 = dog,interest_3 = fish。我希望搜索引擎允許用戶在文本字段中輸入(例如)貓,點擊搜索按鈕,並且它將檢查並顯示那些在interest_1,interest_2或interest_3中擁有單詞cat的人的結果(這意味着一個人可以擁有interest_1 = cat,另一個擁有interest_3 = cat並且他們都出現在搜索結果中)。LIKE/OR SQL查詢,語法錯誤或錯誤的邏輯?
因此,我試圖讓這個查詢:
mysql_query("SELECT * FROM search_table WHERE
something LIKE '{$something}%'
&& (interest LIKE '{$interest_1}%' OR interest LIKE '{$interest_2}%' OR interest LIKE '{$interest_3}%')
&& (interest_2 LIKE '{$interest_1}%' OR interest_2 LIKE '{$interest_2}%' OR interest_2 LIKE '{$interest_3}%')
&& (interest_3 LIKE '{$interest_1}%' OR interest_3 LIKE '{$interest_2}%' OR interest_3 LIKE '{$interest_3}%')
&& something LIKE '{$something}%'
;");
會發生什麼事是,當人們搜索與其他文本框別的東西,離開利益領域的空白,搜索引擎成功地對結果進行過濾。但是,如果有人試圖輸入並搜索興趣文本框,數據庫中的每個成員都會出現(沒有任何內容會被過濾)。
我檢查過它,查詢似乎符合邏輯,所以我懷疑這是一個語法錯誤。然而,我可能是錯的,語法是正確的,但我的邏輯是錯誤的。任何人都可以告訴我問題是什麼,如何修復此查詢?
超過90%的查詢字符串正在形成並且出現錯誤的情況下,通過查看生成的查詢,您可以非常輕鬆地發現錯誤。將該字符串分配給一個變量並將其打印出來以查看實際正在運行的內容。如果結果不明顯,請用結果編輯您的問題。 –
imho問題不在於您的查詢,而在於您的表格設計;你不應該有興趣作爲一個重複組,而是有一個單獨的關聯表與一個外鍵到主表和一個興趣列 - 那麼你的查詢會更簡單(我懷疑速度更慢,如果不是更快) – Bohemian