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

    −867.6

    1. 1
    SELECT SQL_CALC_FOUND_ROWS *,cached_login as login,cached_name as uname,comment_count as ccount FROM posts p WHERE exists (select * from tags tg, tegi_zapisi tx where tg.alt_title like 'post' and tg.id_tag=tx.id_tag and tx.id_post=p.id_post) and exists (select * from tags tg, tegi_zapisi tx where tg.alt_title like 'opentomsk' and tg.id_tag=tx.id_tag and tx.id_post=p.id_post) and hide<>1 ORDER BY p.date desc, p.time desc LIMIT 210,10

    выбираем все посты с определёнными тегами или без них
    удивляемся, почему тормозит пропорционально количеству тегов

    Запостил: guest, 08 Августа 2009

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

    • запрос не получился:
      SELECT SQL_CALC_FOUND_ROWS *,cached_login as login,cached_name as uname,comment_count as ccount FROM posts p WHERE exists (select * from tags tg, tegi_zapisi tx where tg.alt_title like 'post' and tg.id_tag=tx.id_tag and tx.id_post=p.id_post) and exists (select * from tags tg, tegi_zapisi tx where tg.alt_title like 'opentomsk' and tg.id_tag=tx.id_tag and tx.id_post=p.id_post) and hide<>1 ORDER BY p.date desc, p.time desc LIMIT 210,10
      Ответить
      • Логическая ошибка подобного плана не всегда есть говнокод. SQL вообще очень неудобный и плохочитаемый а так же плохомонимаемый язык.
        Ответить
        • > SQL вообще очень неудобный
          > и плохочитаемый а так же
          > плохомонимаемый язык
          Ага, точно, для гуманоида, долбящегося в императивные языки.
          SQL на самом деле классный язык, потому что им не надо выражать "как?", а достаточно лишь "что?"
          Другое дело, что нет единой нормальной реализации.
          Ответить
          • самое смешное то, что кто посчитал это говнокодом варианта лучше предложить не смог. проблема вся в том, что запрос генерится + учитывается логика. в данном случае этот запрос позволит вывести: "что-то" и "что-то" кроме "что-то". или вот так: "только те, где есть одно это". вариант другого запроса для этих целей придумать трудно.
            Ответить
        • Чтобы хорошо читался, надо хорошо записывать :)

          SELECT
          SQL_CALC_FOUND_ROWS *,
          cached_login as login,
          cached_name as uname,
          comment_count as ccount
          FROM posts p
          WHERE
          exists
          (
          select *
          from
          tags tg,
          tegi_zapisi tx
          where
          tg.alt_title like 'post'
          and tg.id_tag = tx.id_tag
          and tx.id_post = p.id_post
          )
          and exists
          (
          select *
          from
          tags tg,
          tegi_zapisi tx
          where
          tg.alt_title like 'opentomsk'
          and tg.id_tag = tx.id_tag
          and tx.id_post = p.id_post
          )
          and hide <> 1
          ORDER BY p.date desc, p.time desc
          LIMIT 210, 10
          Ответить
          • Мдя, отступы сожрало. Но даже так всё равно лучше.
            Ответить
            • Используй подчеркивание для отступов:
              SELECT
              __SQL_CALC_FOUND_ROWS *,
              __cached_login as login
              Ответить

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