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

    −160

    1. 1
    SELECT count(*) as count FROM wz_vacancy WHERE action='1'   and TO_DAYS(NOW()) - TO_DAYS(date) = '0';

    * индекс только по primary key - id
    * Оригинальный способ выборки сегодняшних объектов :) особенно, когда можно подставить конкретные даты еще в коде программы.

    Запостил: scorcher, 19 Августа 2012

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

    • > особенно, когда можно подставить конкретные даты еще в коде программы.

      оспаривать ГКнутость запроса не буду, но не стоит забывать что ДБ как правило крутится на отдельном серваке - часто в другой часовой зоне. многие ДБ ориентированые программы зачастую преднамерено полагаются на время ДБ как на стандартное время.

      но в это все равно `TO_DAYS(NOW()) - TO_DAYS(date) = '0'` не прощает.
      Ответить
    • Если индекс только по id которого нет в запросе, тогда один хрен, каждый запрос шерстит табличку.
      Ответить
    • а как надо напишите
      Ответить
      • SELECT count(*) as count FROM wz_vacancy WHERE action='1'   and date> '$date1' AND date <'$date2';

        где
        * $date1 - это строка 2012-09-11 00:00:00 (начало сегодняшнего дня. в php можно получить просто)
        * $date2 - это строка 2012-09-12 00:00:00 ($date1 + ровно сутки)

        индекс составной по (action, date) - и запрос полетит.
        Но вообще такие наборы данных на крупных проектах хранятся счетчиками и событийкой инкрементятся/декрементятся.
        Ответить
        • А потом иди ищи, что передается в эти даты. А так сразу ясно, что сегодня
          Ответить

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