2014-06-21 191 views
0

我試圖表現出類似於在我的網站上相關產品的東西。我測試了下面的查詢,並且我沒有得到任何錯誤;但我也沒有結果。相關產品SQL查詢

<?php 
    $relatedStmt = $db->query("SELECT * FROM items WHERE tag LIKE id = 1 LIMIT 3"); 
?> 

我也試過%1%,並顯示所有的結果,我認爲代碼想查詢只是SELECT * FROM items

列中的標籤顯示爲以下格式:tagone two three four,所以我試圖顯示具有類似標籤的產品,因此我使用LIKE子句。

Table screenshot

當前查詢與此查詢相關:SELECT * FROM items WHERE id = 1。所以LIKE id = 1是找到與此查詢匹配的標籤以顯示相關產品。

+0

你能告訴我們一個表格的例子嗎? – ncdreamy

+0

想想LIKE'的''作爲CONTAINS' - 'WHERE標籤LIKE「%紅色%」將發現的所有行標記*包含*字符串'red' –

+0

@ncdreamy我已經更新了表截圖的問題。 –

回答

0

我不確定那id = 1的事情在你的查詢,但無論如何你可以試試這個:SELECT * FROM items WHERE tag LIKE '%search_this_tag%' LIMIT 3

+1

請注意,如果沒有ORDER BY,LIMIT幾乎沒有意義 – Strawberry

+0

我不是在搜索確切的標籤。我想要匹配id = 1行的標籤。 –

+0

@Strawberry謝謝,我會改變我的觀點。 –

1

LIKE不工作,你似乎期望的方式。這是一個用於字符比較的字符,在操作數之間帶有通配符。

在mysql函數中,最接近你想要的可能是LOCATEFIND_IN_SET。在其他問題中存在拆分解決方案,例如"Can Mysql Split a column?""Split a MYSQL string from GROUP_CONCAT into an (array, like, expression, list) that IN() can understand"。然而,即便如此還有就是在你的級聯tag列中顯示各個變量與其他行的表格中的各個標籤比較沒有什麼好辦法。

因此,我想你會更好用item_id移動標記到自己的表作爲一個外鍵。那麼解決方案是:trivial (SQLFiddle)

-- Related Items 
SELECT * 
    FROM items 
WHERE id in (SELECT DISTINCT item_id 
       FROM tags t 
       JOIN (SELECT tag 
         FROM tags 
         WHERE item_id = 1 
        ) t1 ON t1.tag = t.tag 
       WHERE item_id != 1 
      ) 
;