Порядок SQL по постам, содержащим вхождения строк в другой таблице - PullRequest
1 голос
/ 20 января 2012

Итак, у меня есть таблица, полная ключевых слов тегов.

Tags
------------------
asp
sql
html

и таблица, полная сообщений

posts
------------------
I really like ASP
This week with stuff about ASP
This post contains SQL

Я хочу отображать топ-10 тегов в порядке самых уникальныхсообщения, содержащие вхождения в таблице сообщений.

Это то, что у меня есть, но это мусор, мне стыдно.

SELECT Tag,(SELECT Count(*) FROM Posts WHERE post LIKE '%Tags.Tag%') As Mentions FROM Tags ORDER BY Mentions DESC

Пожалуйста, помогите!Я знаю, что есть какой-то мистический UNION или GROUP BY, которого мне здесь не хватает.

Ответы [ 2 ]

3 голосов
/ 20 января 2012
SELECT TOP 10 *
FROM (
    SELECT tag,COUNT(tag) AS Total
    FROM tags t
    JOIN posts p ON p.post LIKE '%' + t.tag + '%'
    GROUP BY tags
) totals
ORDER BY Total Desc
0 голосов
/ 20 января 2012

Протестировано в MySQL:

SELECT tag,count(*) AS n
FROM tags
JOIN posts ON post LIKE CONCAT("%",tag,"%")
GROUP BY tag
ORDER BY n DESC
LIMIT 10

Чтобы проиллюстрировать, как это работает, полезно сначала запустить без GROUP BY

SELECT tag,post
FROM tags
JOIN posts ON post LIKE CONCAT("%",tag,"%");

+------+------------------------+
| tag  | post                   |
+------+------------------------+
| asp  | I really like asp      |
| asp  | this week: asp         |
| sql  | this post contains sql |
+------+------------------------+
3 rows in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...