我有多个关键字不同的项目,并且希望在项目的详细信息页面上显示类似项目(基于关键字)。通过关键字的类似条目
所以一个项目有例如关键词:苹果,红色,圆形,新鲜,水果。
我想从数据库中选择具有所有/某些/这些关键字之一的项目......按照匹配关键字(相关性/对应关系)的数量排序。
有没有办法在普通的SQL语句中做到这一点?喜欢的东西:
SELECT id FROM images WHERE keywords MAGICSTATEMENTHERE 'apple|red|round|fresh|fruit' ORDER BY MATCHES LIMIT 10
编辑1:
的关键字保存在数据库中的字段像JSON格式的字符串:
["abhauen","abheben","beflügelt","bunt","bunter"]
编辑2:
我已将数据库结构更改为保存关键字的2个表格。
关键字:id | keyword
keyword_relations:keyword_id | image_id
至于我可以看到我只需要keyword_relations表得到类似的图像image_ids。
我想是这样的:
SELECT image_id FROM keyword_relations WHERE keyword_id IN(SELECT * FROM keyword_relations WHERE image_id=" . $image->id . ") ORDER BY MATCHES"
但它返回 “操作数应包含1列(S)”
什么'LIKE'和'或'? – Swellar
假设您已经熟悉规范化,请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-tobe -a-very-simple-sql-query – Strawberry
@Swellar我认为LIKE和OR会因为子串排序和所有排列而变得非常详细。 – mickmackusa