2014-03-25 82 views
0

我有3個名爲「圖片」,「圖片標籤」和「標籤」的表格。 有一個搜索框,用戶在其中鍵入想要搜索的圖像的名稱。當用戶輸入這個術語時,我想讓它說出名稱,描述和圖像。用於搜索的SQL查詢幫助

例如,如果用戶用「太陽」標記圖像,則不顯示該圖像。 我已經嘗試了很多東西,但認爲在我的代碼中可能會有一些東西阻止了這一點。我可以使用什麼樣的查詢作爲我試圖執行的查詢,而不是在搜索「標籤」時顯示圖像?

查詢是:

$sql = " 
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '$searchvalueentered ' 
    AND pictag.tagpicID= '$searchvalueentered ' 
    AND tagging.tagpicID= '$searchvalueentered '"; 
+0

嘗試使用OR而不是AND在哪裏條件。還有一件事,根據您的查詢輸入搜索詞必須與數據庫值匹配。我不認爲這會更可取。使用LIKE而不是「=」.... – Kishore

+0

HI ..其中是三個表之間的關係..查看該問題。 – Kishore

+0

首先,請參閱JOIN – Strawberry

回答

0

我不太明白你在做什麼,什麼三個表是但你試過用「或」您的WHERE子句中,而不是「AND」 。我有一個預感,那就是問題所在。

0

試試這個。

$sql = " 
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '" . $searchvalueentered . "' 
    OR pictag.tagpicID = '" . $searchvalueentered . "' 
    OR tagging.tagpicID = '" . $searchvalueentered . "' 
"; 

順便說一句,您應該考慮使用預準備語句。這是非常不安全的。

+0

感謝Hector的幫助,但是當搜索「標籤名稱」時,圖像仍未顯示在屏幕上。你認爲這可能與whileloop有什麼關係,因爲我已經對此做了調整,但出現以下錯誤: 警告:mysql_fetch_array()期望參數1是資源,布爾值在C:\ xampp \ htdocs \圖片\ testingsearch.php在線45 我相信這個錯誤是由於whileloop: $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){ } – user3457677

0
$sql = " 
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '$searchvalueentered ' 
    OR pictag.tagpicID= '$searchvalueentered ' 
    OR tagging.tagpicID= '$searchvalueentered '"; 

將工作,但你真的想加入你的表,否則你會得到重複的記錄在你的結果(也許這是你想要的)。

假設pictag和標籤是1:

SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
FROM pictures 
LEFT JOIN pictag ON pictures.idpic = pictag.tagpicID 
LEFT JOIN tagging ON pictures.idpic = tagging.tagpicID 
WHERE pictures.idpic = '$searchvalueentered'; 

我不能測試你的查詢,但我懷疑這會:1個你的照片的表,我會勸你試試這個方法,而不是關係產生預期的結果,因爲所有的表都與「idpic」鍵有關。

+0

可能是表格沒有關係。如果這些表存儲來自不同來源的圖像以及OP想要的是在其中任何一箇中搜索名稱,則不需要該聯接。 –

+0

@David,感謝David的建議。然而,我一直在使用sql代碼,當搜索「標籤名稱」時,圖像仍然不顯示在屏幕上。你認爲這可能與'whileloop'有什麼關係,因爲我對此進行了調整,但出現以下錯誤:警告:mysql_fetch_array()期望參數1是資源,布爾值在C:\ xampp \ htdocs \第45行的圖片\ testingsearch.php我相信這個錯誤是由於whileloop:$ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){} – user3457677

+0

嗯,我對PHP知之甚少。我喜歡與PEAR MDB2或Laravel一起工作,但不太經常使用本地方法。您可能會檢查您的查詢或爲您的邏輯添加一些錯誤處理。例如 - '$ result = mysql_query($ sql)或者死(mysql_error()); while($ row = mysql_fetch_array($ result)){ - etc.'。錯誤時,mysql_query返回false。 –

0

正如David所說,你應該試着加入你的表,以消除重複,簡化搜索,你可以嘗試..

SELECT 
    pictures.idpic, 
    pictures.name, 
    pictures.info, 
    pictag.tagpicID, 
    pictag.pictagName, 
    tagging.IDimage, 
    tagging.tagpicID 
FROM pictures 
INNER JOIN pictag 
    ON pictures.idpic = pictag.tagpicID 
INNER JOIN tagging 
    ON pictures.idpic = tagging.tagpicID 
WHERE 
    CONCAT_WS(' ',pictures.idpic,pictag.tagpicID,tagging.tagpicID) LIKE %$searchvalueentered% 

注:不是一個非常優化的解決方案。