2013-10-29 55 views
1

我在我的「search.php」中構建了一個數據庫的搜索功能,在該數據庫中我存儲了有關ip地址和各種單元的信息。每個單位在數據庫中都有一個「類別」列。我的搜索選擇是在文本字段中搜索,和/或在下拉列表中選擇一個類別。當我在下拉列表中選擇一個類別並且不在文本字段中輸入任何內容時,我會得到正確的結果(返回包含所選類別的所有行)。MySQL SELECT「LIKE」參數無法正常工作

但是,當我在文本字段中輸入任何內容時,我沒有得到任何結果。

查詢時,我只能選擇類別(在這種情況下,「IP-住址」被選爲類):

SELECT dataid, 
     firstname, 
     lastname, 
     data.name dataname, 
     description, 
     ip, 
     TYPE, 
     TIMESTAMP 
FROM DATA 
INNER JOIN USER ON DATA.userid=USER.userid 
WHERE TYPE='IP-adress' 
    AND DATA.name LIKE '%%' 
    AND description LIKE '%%' 
    AND ip LIKE '%%' 
    AND TYPE LIKE '%%' 
    AND firstname LIKE '%%' 
    AND lastname LIKE '%%' 
ORDER BY TIMESTAMP DESC 

這是返回一個包含所選類別,因爲我想所有行。

查詢,當我在文本框輸入內容:

SELECT dataid, 
     firstname, 
     lastname, 
     data.name dataname, 
     description, 
     ip, 
     TYPE, 
     TIMESTAMP 
FROM DATA 
INNER JOIN USER ON DATA.userid=USER.userid 
WHERE TYPE='IP-adress' 
    AND DATA.name LIKE '%test%' 
    AND description LIKE '%test%' 
    AND ip LIKE '%test%' 
    AND TYPE LIKE '%test%' 
    AND firstname LIKE '%test%' 
    AND lastname LIKE '%test%' 
ORDER BY TIMESTAMP DESC 

我有,我有一個包含「測試」一詞就像我輸入列組合,但我沒有得到任何結果。

我已經有相當一段時間了,我很確定我有過相反的問題,在我選擇一個類別時沒有得到任何結果。

無論如何,我希望另一雙眼睛可以幫助我在這裏。如果你需要更多的代碼,只需要它!

+0

您還可以提供您希望返回的數據示例記錄嗎? –

+0

您確定只需要__all__列中包含'test'的記錄...? – CBroe

回答

1

這是因爲您對所有條件都使用了AND。它會搜索所有惡魔的測試,如果一個領域沒有測試,那麼情況就會失敗。 試試這個方法

SELECT dataid, 
     firstname, 
     lastname, 
     data.name dataname, 
     description, 
     ip, 
     TYPE, 
     TIMESTAMP 
FROM DATA 
INNER JOIN USER ON DATA.userid=USER.userid 
WHERE TYPE='IP-adress' 
    AND (DATA.name LIKE '%test%' 
    OR description LIKE '%test%' 
    OR ip LIKE '%test%' 
    OR TYPE LIKE '%test%' 
    OR firstname LIKE '%test%' 
    OR lastname LIKE '%test%') 
ORDER BY TIMESTAMP DESC 
+0

這工作!起初,我只是將較低的「AND's」更改爲「OR」,導致了多個結果,但我沒有注意到「('WHERE TYPE ='IP-address'AND'和')」之後的「(」)。非常感謝您的快速回復! – Anen

0

如果我期待在第二個查詢:

WHERE type='IP-adress' 

,稍後:

AND type LIKE '%test%' 

這不會給任何結果返回爲 'IP-ADRESS' 不包含'test'in ...

此外,第二個查詢實際上意味着在where中給出的所有字段應該至少包含文本'test'。你確定這是正確的嗎?