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

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

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

    DikMax Гость

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

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

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

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

    Код (Text):
    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) успехом не увенчались:
    Код (Text):
    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 Гость

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

    Впринципе напишите GROUP_CONCAT(t.tag SEPARATOR ' ' ORDER BY t.tag)
     
Загрузка...
Похожие Темы - Вопрос Сортировка внутри
  1. Генералл
    Ответов:
    2
    Просмотров:
    62
  2. ApplePen
    Ответов:
    0
    Просмотров:
    63
  3. gURaBA_N
    Ответов:
    3
    Просмотров:
    94
  4. ghost
    Ответов:
    1
    Просмотров:
    89
  5. kartaman
    Ответов:
    0
    Просмотров:
    128
Статус темы:
Закрыта.

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