За последние 24 часа нас посетили 17679 программистов и 1645 роботов. Сейчас ищут 988 программистов ...

Про теги

Тема в разделе "MySQL", создана пользователем bFree, 11 авг 2010.

  1. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Связь многие-ко-многим, все стандартно.
    Таблицы такие:
    Код (Text):
    1.  
    2. posts: post_id // остальное неважно
    3.  
    4. tags: tag_id | tag_name | tag_count
    5.  
    6. posts_tags: pt_post_id | pt_tag_id
    Вопрос такой: как лучше всего добавлять новые теги? так, чтобы для существующих инкрементился count, а новые записывалсиь.

    Очень не хочется для каждого тега плодить запросы. \=
    Есть ли нормальный оптимальный способ?
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Ну для каждого тега и не надо - WHERE tag_name IN("bla", "blah", "blamb", ...) спасает :)
     
  3. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Psih
    это для инкремента?

    А как быть со вставкой новых тегов?
     
  4. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    Psih, спасибо. Совсем забыл про IN :)
    Проблему с добавлением решил. Вроде не так и много запросов вышло..

    Но теперь думаю, как выводить записи с заданным тегом \=
    Сейчас для вывода всех записей юзаю такой запрос:
    [sql]
    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
    [/sql]
    где blog_tags_posts - связующая таблица.

    Вопрос: как можно заставить вытряхивать из базы только посты, которые содержат определенный тег?
    Если пишу WHERE blog_tag_tag = 'some_tag', то выводит нужные посты, но в списке тегов для него значится только этот тег, остальные не подтягивает \=

    Понимаю, что объяснил не очень понятно, но как уж получилось =)

    Очень буду признателен за помощь от знающих людей.
     
  5. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    WHERE blog_tag_tag like '%some_tag%'
     
  6. bFree

    bFree Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    81
    Симпатии:
    0
    ShamahN
    мимо.. (

    Для понятности приведу пример базы:
    Вот так хранятся данные.
    При выборке для каждого поста с помощью GROUP_CONCAT получаю blog_post_tags = 'some tag, another some tag'