2017-07-27 73 views
0

选择我有以下表结构:的MySQL按标签从不同的表

图像0​​ ID | ...

keyword_relations
id | keyword_id | image_id

关键字
id |关键字

我该如何选择是否有人搜索“房子”之类的东西。在搜索“红屋”(关键字“红色”和关键字“房子”)等多个关键字时,如何才能显示包含所有关键字的图片。

我有的查询不能完美工作,其中一些非常缓慢。

这甚至可能在一个查询中,或者它会更好地分裂它们吗?

+0

假设关键字的数量可以变化,一种方法是使用字符串连接来构建SQL。如果这不是你的意思,请提供更具体的示例数据。订单是重要的还是关键字可以以任何顺序出现? – GurV

+0

显示你到目前为止已经尝试过的,所以我们可以从中解决问题。 –

+0

我只是摆弄不同的方法,但没有一个似乎是一个很好的解决方案。我认为,因为这是一个相当常见的表格结构这样的信息必须有某种最好的做法,我没有意识到...... –

回答

0

根据要求,这里我到目前为止(简化)。首先,我从关键字关键字的ID(搜索字符串分解):
"SELECT id FROM keywords WHERE keyword IN($keywords)"

,从我产生被用于主查询ID列表:
"SELECT i.* FROM images i JOIN keyword_relations k ON k.image_id = i.id WHERE k.keyword_id IN($kids) GROUP BY i.id HAVING COUNT(k.keyword_id) = $keywordcount"

的COUNT甚至可以使用按相关性排序,相关性是匹配关键字的数量。