SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.09.2010 11:06:27

vladqa
Участник
Зарегистрирован: 06.09.2010
Сообщений: 6

Теги и выборка по тегу.

Здравствуйте. Уже неделю бьюсь над решением задачи:

Есть база данных, связь многие-ко-многим:

posts: post_id // остальное неважно

tags: tag_id | tag_name | tag_count

posts_tags: pt_post_id | pt_tag_id

Для вывода всех записей и тегов к каждой из них я использую запрос:

SELECT `blog_posts`.*, GROUP_CONCAT(`blog_tag_tag`) as `blog_post_tags`
     FROM `blog_posts`
     LEFT JOIN `blog_tags_posts` ON `blog_post_id` = `blog_tp_post_id`
     LEFT JOIN `blog_tags` ON `blog_tp_tag_id` = `blog_tag_id`
     GROUP BY 1


Все прекрасно работает.

Но как вывести только те записи, которые имеют какой-то определенный тег?
Если я добавляю в запрос
WHERE `blog_tag_tag` = 'some_tag'
, то нужные посты выводяться, но GROUP_CONCAT(`blog_tag_tag`) as `blog_post_tags` возвращает только этот самый 'some_tag', т.е. получается, что у поста при выводе есть только искомый тег, а других нет.

Если не очень понятно объяснил - спрашивайте.

Неактивен

 

#2 06.09.2010 12:27:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Теги и выборка по тегу.

having `blog_tag_tag` like('%some_tag%');

или в 2 запроса: сначала ищите нужные посты, затем к этим постам теги

Неактивен

 

#3 06.09.2010 12:46:17

vladqa
Участник
Зарегистрирован: 06.09.2010
Сообщений: 6

Re: Теги и выборка по тегу.

Ооо, спасибо! ) Я совсем забыл про having

having `blog_tag_tag` like('%some_tag%');

А как быть, если теги могут содержать пробелы?
т.е. ищя по тегу "tag" мы будем получать и посты с тегом "another tag"

Неактивен

 

#4 06.09.2010 13:14:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Теги и выборка по тегу.

like('some_tag,%') or like('%,some_tag,%') or like('%,some_tag');

Неактивен

 

#5 06.09.2010 13:25:59

vladqa
Участник
Зарегистрирован: 06.09.2010
Сообщений: 6

Re: Теги и выборка по тегу.

Ошибка в синтаксисе (
конец запроса такой:

GROUP BY 1 HAVING `blog_post_tags` LIKE("some_tag,%") or LIKE("%,some_tag,%") or LIKE("%,some_tag")


Видимо, нельзя несколько LIKE

Неактивен

 

#6 06.09.2010 13:31:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Теги и выборка по тегу.

HAVING `blog_post_tags` LIKE("some_tag,%") or `blog_post_tags` LIKE("%,some_tag,%") or  `blog_post_tags`LIKE("%,some_tag")

Неактивен

 

#7 06.09.2010 13:34:16

vladqa
Участник
Зарегистрирован: 06.09.2010
Сообщений: 6

Re: Теги и выборка по тегу.

Я идиот.

Большое спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson