1. SQL / Говнокод #12297

    −163

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    SELECT news_tbl.*, users_tbl.*,
    GROUP_CONCAT(comments_tbl.comments_id) AS commentsid,
    GROUP_CONCAT(CONCAT ('<hr><h6>Navn: ', comments_tbl.name,'</h6>','<p>',comments_tbl.comment, '</p>') SEPARATOR '<br><br>') AS comments, 
    COUNT(comments_tbl.comments_id) AS comments_count
    FROM news_tbl
    LEFT JOIN comments_tbl ON comments_tbl.news_id = news_tbl.news_id
    LEFT JOIN users_tbl ON news_tbl.user = users_tbl.username
    GROUP BY news_tbl.news_id
    ORDER BY news_tbl.news_id DESC LIMIT 5

    Наткнулся на SO.

    Запостил: Lowezar, 15 Декабря 2012

    Комментарии (7) RSS

    • Ах да, забыл. У автора вопрос, как в этот GROUP_CONCAT впихнуть comment_id и сделать кнопку для удаления конкретного коммента...
      Ответить
    • Мда, остается еще CMS/форум/что-нибудь-еще на хранимках написать...
      Ответить
    • > Navn:
      Что-то скандинавское?

      > comments_tbl
      > news_tbl
      > users_tbl
      Венгерская нотация с хвоста? Оригинально, да...

      > SELECT news_tbl.*, users_tbl.*,
      ...
      > GROUP BY news_tbl.news_id
      Как ЭТО вообще компилируется-то? ANSI SQL регламентирует, что при группировке поля должны быть или в GROUP BY или в выборке с указанием агрегации. Это мускул чтоль позволяет такой произвол делать?
      Ответить
      • > Это мускул чтоль позволяет такой произвол делать?
        Ага, вот такая вот петрушка. Тоже офигел, когда первый раз эту фичу увидел (забыл добавить поле в групбай). Зачем эта херня включена по дефолту - х.з.

        MySQL extends the use of GROUP BY so that the select list can refer to nonaggregated columns not named in the GROUP BY clause.
        The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate. ...
        To disable the MySQL GROUP BY extension, enable the ONLY_FULL_GROUP_BY SQL mode.


        http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
        Ответить
        • Мне особенно нравится any value; это мускульное что-нибудь очень хорошо сочетается с пехепешным чем-угодно. :)
          Впрочем, у мускула есть и намного менее приятные особенности. Например, есть колонка, которая должна стать FOREIGN KEY и NOT NULL... Много времени я потом убил из-за того, что эта сволочь не ругнулась на недостающий ID и просто влепила туда 0.
          Ответить
          • Ну я же не зря его выделил :)

            Сочетание этой фичи с уровнем знаний SQL у типичного пыхера равносильно тому, чтобы дать гранату обезьяне, и сказать "ну а что, мы же тут оставили возможность ее обезвредить".

            P.S. Те кому эта фича действительно нужна могли бы ее включить руками, они для этого достаточно опытны и разумны. Но нахуйа, простите, такие вещи по дефолту?

            P.P.S. Сам налетел на эту ошибку с any value когда опечатался и не добавил поле в групбай, долго отходил от шока, увидев что mysql даже ворнинга не сподобился выдать...
            Ответить
    • Форматирование html в запросе - в первый год обучения программированию на старом добром VB6 я мог себе позволить это. И еще бы удивился за что такой код ругают. )))
      Ответить

    Добавить комментарий