在过去的几天里我遇到了这个问题。我有用户'一个表中的标签(user_tags
)和另一个表中的文章(crawler_results
),我试图对文章进行排序,以便首先放置包含最多标签的文章。 / p>
你是怎么做到的? 这是我的代码:
SELECT content
FROM crawler_results articles
INNER JOIN user_newspapers un
ON un.newspaper_id = articles.newspaper_id
WHERE un.user_id = '$user_id'
我不得不加入user_tags
表,其中包含:
tag and user_id
编辑: 让我们说用户想要找到带有这些标签的文章:#stack和#overflow。首先显示包含大多数这些标签的文章。所以有一篇文章说:"堆栈溢出很棒"排名高于:"溢出很棒"。标签可以重复使用,例如:"溢出,溢出,溢出"算作3。 我想对文章进行排序,以便首先包含最多标签的文章。
这是如何实现的?我有四个表:crawler_results(我存储文章的地方),报纸(我存储报纸的地方),user_newspapers(我有newspaper_id和user_id)和user_tags(我有标签和user_id)。
我是否需要创建一个单独的表来存储文章中的所有单词,或者这可以通过SQL查询来完成?
我真的很感谢你的帮助!
答案 0 :(得分:0)
如果您只需要使用相关标签的数量对查询进行排序,请尝试以下查询:
SELECT title
, c.name AS category
, img_src
, n.name AS newspaper_name
, crawler_results.id AS id
, crawler_results.content AS content
FROM crawler_results
INNER JOIN newspapers n ON n.id = crawler_results.newspaper_id
INNER JOIN categories c ON c.id = crawler_results.category
INNER JOIN user_newspapers un ON un.newspaper_id = n.id
INNER JOIN (SELECT ut.user_id
,COUNT(ut.tag) AS nb_tags
FROM user_tags ut
GROUP BY ut.user_id) t ON t.user_id = un.user_id
INNER JOIN user_categories uc ON uc.category_id = c.id
WHERE img_src != ''
AND char_length(content) > 750
AND active = '1'
AND un.user_id = '$user_id'
GROUP BY title
ORDER BY category ASC, t.nb_tags DESC
如果结果不符合您的预期,请尝试澄清您的问题并最终提供您期望的数据示例。
希望这会有所帮助。