我正在尝试在我的网站上展示与相关产品类似的内容。我测试了以下查询,没有收到任何错误;但我也没有得到任何结果。
<?php
$relatedStmt = $db->query("SELECT * FROM items WHERE tag LIKE id = 1 LIMIT 3");
?>
我还尝试了%1%
,它显示了所有结果,我假设代码认为查询只是SELECT * FROM items
。
该列中的标签按以下格式显示:tagone 二三四
,所以我试图显示具有相似标签的产品,这就是为什么我使用 LIKE
子句。
当前查询与此查询相关:SELECT * FROM items WHERE id = 1
。所以LIKE id = 1
就是找到与这个查询匹配的标签来展示相关的产品。
最佳答案
LIKE
不按您预期的方式工作。它是用于在操作数之间使用通配符进行字符比较的字符。
在 mysql 函数中,最接近您想要的可能是 LOCATE
或FIND_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
)
;
关于php - 相关产品 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341727/