我试图在我的网站上显示类似于相关产品的内容。我测试了以下查询,没有错误;但我也没有得到任何结果。
<?php
$relatedStmt = $db->query("SELECT * FROM items WHERE tag LIKE id = 1 LIMIT 3");
?>
我也尝试了%1%
并显示了所有结果,我认为代码认为查询只是SELECT * FROM items
。
列中的标签以下列格式显示:tagone two three four
,因此我尝试显示具有相似标签的产品,因此我使用了LIKE
子句。
当前查询与此查询相关:SELECT * FROM items WHERE id = 1
。因此,LIKE id = 1
是查找与此查询匹配的标记,以显示相关产品。
答案 0 :(得分: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
)
;
答案 1 :(得分:0)
我不确定您的查询中的id = 1
内容,但无论如何您可以尝试这样做:SELECT * FROM items WHERE tag LIKE '%search_this_tag%' LIMIT 3