相关产品SQL查询

时间:2014-06-21 12:43:47

标签: php mysql sql pdo sql-like

我试图在我的网站上显示类似于相关产品的内容。我测试了以下查询,没有错误;但我也没有得到任何结果。

<?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是查找与此查询匹配的标记,以显示相关产品。

2 个答案:

答案 0 :(得分: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
              )
;

答案 1 :(得分:0)

我不确定您的查询中的id = 1内容,但无论如何您可以尝试这样做:SELECT * FROM items WHERE tag LIKE '%search_this_tag%' LIMIT 3