Jos*_*ith 10 mysql tags search sphinx
我正在试图找出如何通过匹配的标签数量来订购带有匹配标签的商品.
假设您有三个MySQL表:
tags(tag_id, title)articles(article_id, some_text)articles_tags(tag_id, article_id)现在让我们说你有四篇文章:
article_id = 1 有"幽默","搞笑"和"搞笑"的标签.
article_id = 2 有"滑稽","愚蠢"和"高飞"的标签.
article_id = 3 有"滑稽","愚蠢"和"高飞"的标签.
article_id = 4 标签"完全严重".
您需要找到article_id = 2至少一个匹配标记相关的所有文章,并按最佳匹配顺序返回结果.换句话说,article_id = 3应该先到article_id = 1第二,article_id = 4而不应该出现.
这是在SQL查询中单独使用的东西,还是更适合像Sphinx这样的东西?如果是前者,应该进行什么样的查询,以及应该为最高效的结果创建什么类型的索引?如果是后者,请进行扩展.
And*_*per 12
尝试这样的事情:
select article_id, count(tag_id) as common_tag_count
from articles_tags
group by tag_id
where tag_id in (
select tag_id from articles_tags where article_id = 2
) and article_id != 2
order by common_tag_count desc;
Run Code Online (Sandbox Code Playgroud)
语法可能需要对MySQL进行一些调整.
或者这个实际有用的; ;-)
SELECT at1.article_id, Count(at1.tag_id) AS common_tag_count
FROM articles_tags AS at1 INNER JOIN articles_tags AS at2 ON at1.tag_id = at2.tag_id
WHERE at2.article_id = 2
GROUP BY at1.article_id
HAVING at1.article_id != 2
ORDER BY Count(at1.tag_id) DESC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |