1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Вопрос: Сортировка внутри Group_concat в Mysql

Тема в разделе "Базы данных и администрирование", создана пользователем DikMax, 31 июл 2007.

Статус темы:
Закрыта.
  1. DikMax

    DikMax Гость

    Репутация:
    0
    Есть несколько таблиц:
    - publications (id, date, title, text, ...)
    - tags (id, tag)
    - tags_in_publications (id, publicationid, tagid)
    остальные не существенны

    И есть 2 запроса:
    (1) выборка 1 публикации
    (2) выборка всех публикаций

    В каждом запросе кроме основных полей должно выбираться еще одно поле в котором перечислены все теги связанные с новость отсортированные по алфавиту разделенные пробелами.

    Запрос (1) путем долгих экпериментов удалось написать:

    Код:
    SELECT p.id, p.`title`, DATE_FORMAT(p.`date`, '%e.%c.%Y') AS `date`, t.tags AS tags, n.shorttext AS 
    `short`, `text` AS `long`
    FROM publications AS p
    LEFT JOIN news AS n ON p.connectid = n.id
    LEFT JOIN (
    SELECT tp.publicationid AS id, GROUP_CONCAT(t.tag SEPARATOR ' ') AS tags
    FROM (SELECT * FROM tags ORDER BY tag ASC) AS t
    LEFT JOIN tags_in_publications AS tp ON tp.tagid = t.id
    WHERE tp.publicationid = 15
    GROUP BY tp.publicationid
    ORDER BY t.tag ASC) AS t ON t.id = p.id
    WHERE p.id = 15
    Причем если оставить только 1 (любой) ORDER BY строка получается неотсортированной

    Попытки написать таким же образом запрос (2) успехом не увенчались:
    Код:
    SELECT SQL_CALC_FOUND_ROWS p.id, p.`date`, p.title, t.tags
    FROM publications p
    LEFT JOIN (
    SELECT tp.publicationid AS id, GROUP_CONCAT(t.tag SEPARATOR ' ') AS tags
    FROM (SELECT * FROM tags ORDER BY tag ASC) AS t
    LEFT JOIN tags_in_publications AS tp ON tp.tagid = t.id
    GROUP BY tp.publicationid
    ORDER BY t.tag ASC) AS t ON p.id = t.id
    WHERE category = 1
    LIMIT 0,25
    Вот собственно вопрос: как это нужно написать?
     
  2. MajestiC

    MajestiC Гость

    Репутация:
    0
    А зачем всё пихать в 1 запрос? Не было идеи тэги отдельно выбирать, религия не позволяет сделать доп 25 запросов? MySQL просто обожает оптимизировать такие длинные запрос с group_concat и subselectами.

    Впринципе напишите GROUP_CONCAT(t.tag SEPARATOR ' ' ORDER BY t.tag)
     
Загрузка...
Похожие Темы - Вопрос Сортировка внутри
  1. erlan1749
    Ответов:
    2
    Просмотров:
    75
  2. SlipX
    Ответов:
    1
    Просмотров:
    87
  3. Irusik
    Ответов:
    5
    Просмотров:
    108
  4. Unkown_
    Ответов:
    14
    Просмотров:
    180
  5. thunder
    Ответов:
    3
    Просмотров:
    408
Статус темы:
Закрыта.

Поделиться этой страницей