Допустим, у меня есть четыре таблицы: PAGE
, USER
, TAG
и PAGE-TAG
:
Table | Fields
------------------------------------------
PAGE | ID, CONTENT
TAG | ID, NAME
USER | ID, NAME
PAGE-TAG | ID, PAGE-ID, TAG-ID, USER-ID
И скажем, у меня есть четыре страницы:
PAGE#1 'Content page 1' tagged with tag#1 by user1, tagged with tag#1 by user2
PAGE#2 'Content page 2' tagged with tag#3 by user2, tagged by tag#1 by user2, tagged by tag#8 by user1
PAGE#3 'Content page 3' tagged with tag#7 by user#1
PAGE#4 'Content page 4' tagged with tag#1 by user1, tagged with tag#8 by user1
Я ожидаю, что мой запрос будет выглядеть примерно так:
select page.content ?
from page, page-tag
where
page.id = page-tag.pag-id
and page-tag.tag-id in (1, 3, 8)
order by ? desc
Я хотел бы получить вывод следующим образом:
Content page 2, 3
Content page 4, 2
Content page 1, 1
Цитировать Neall
Ваш вопрос немного сбивает с толку. Хотите узнать, сколько раз каждая страница была помечена?
нет
Нет
Сколько раз каждая страница получала каждый тег?
нет
Нет
Количество уникальных пользователей, которые отметили страницу?
Нет
Количество уникальных пользователей, которые отметили каждую страницу каждым тегом?
нет
Нет
Я хочу знать, сколько переданных тегов появятся на конкретной странице, а не только, если появятся какие-либо из тегов.
SQL IN работает как логический оператор OR. Если страница была помечена каким-либо значением в предложении IN, она возвращает true. Я хотел бы знать, сколько значений внутри предложения IN возвращает true.
Ниже я показываю ожидаемый результат:
page 1 | in (1,2) -> 1
page 1 | in (1,2,3) -> 1
page 1 | in (1) -> 1
page 1 | in (1,3,8) -> 1
page 2 | in (1,2) -> 1
page 2 | in (1,2,3) -> 2
page 2 | in (1) -> 1
page 2 | in (1,3,8) -> 3
page 4 | in (1,2,3) -> 1
page 4 | in (1,2,3) -> 1
page 4 | in (1) -> 1
page 4 | in (1,3,8) -> 2
Это будет содержимое таблицы тегов страницы, о которой я упоминал ранее:
id page-id tag-id user-id
1 1 1 1
2 1 1 2
3 2 3 2
4 2 1 2
5 2 8 1
6 3 7 1
7 4 1 1
8 4 8 1
@ Kristof не совсем то, что я ищу, но все равно спасибо.
@ Daren Если я выполню ваш код, я получу следующую ошибку:
#1054 - Unknown column 'page-tag.tag-id' in 'having clause'
@ Эдуардо Молтени Ваш ответ не дает вывод в вопросе, но:
Content page 2 8
Content page 4 8
content page 2 3
content page 1 1
content page 1 1
content page 2 1
cotnent page 4 1
@ Keith Я использую обычный SQL, а не T-SQL, и я не знаком с T-SQL, поэтому я не знаю, как ваш запрос переводится на простой SQL.
Есть еще идеи?