1. PHP / Говнокод #10966

    +61

    1. 1
    $istmount = mysql_num_rows(mysql_query("SELECT `cid` FROM `usermail` WHERE `date` >='".date('Y-m-d', strtotime('-1 month'))."'"));

    Подсчет количества подписчиков за прошлый месяц. Про count(*) автор, похоже, не в курсе...
    И, чтобы не было вопросов про формат поля даты:
    date - это varchar(11) :)

    Запостил: domaster, 15 Июня 2012

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

    • Трафика у автора вагон. Не знает куда девать.
      Ответить
      • Да. Круче было бы только "select * from " :)
        Ответить
        • Нифига. SELECT * FROM * круче. А потом скриптом по таблицам разобрать.
          Ответить
    • Сферическое php говно в вакууме, и даты есть и mysql и сам php.
      Шикарно )
      Ответить
    • А count(*) намного лучше?)) Тогда уже SUM(1) или COUNT(`cid`)...
      Ответить
      • Простите, но с SQL у Вас туго, если видите разницу между count(*) и count(field).
        Ответить
        • mysql> create database govnotest;
          Query OK, 1 row affected (0.00 sec)
          mysql> use govnotest;
          Database changed
          mysql> create table govno (id int, name varchar(32));
          Query OK, 0 rows affected (0.40 sec)
          mysql> insert into govno values (1, 'govno1');
          Query OK, 1 row affected (0.85 sec)
          mysql> insert into govno values (2, 'govno2');
          Query OK, 1 row affected (0.07 sec)
          mysql> insert into govno values (3, null);
          Query OK, 1 row affected (0.29 sec)
          mysql> select count(name) from govno;
          +-------------+
          | count(name) |
          +-------------+
          |           2 |
          +-------------+
          1 row in set (0.00 sec)
          mysql> select count(*) from govno;
          +----------+
          | count(*) |
          +----------+
          |        3 |
          +----------+
          1 row in set (0.00 sec)

          Вопросы есть?
          Ответить
          • WTF? Почему успешный create table затронул 0 строк?
            Если вообще уместно это выводить для DDL...
            Ответить
          • Да, если поле field - идентификатор, то разницы не будет. Забыл уточнить, мой завтык.
            Или Вы можете доказать, что перформанс будет разный?
            Ответить
            • А, так а смысл сравнивать перфоманс у функций, возвращающих РАЗНЫЙ результат?

              Для not null полей скорее всего будут одинаковые планы в обоих случаях.
              Для полей с null'ом, возможно, count(field) будет не быстрее count(*).
              Ответить
              • > А, так а смысл сравнивать перфоманс у функций, возвращающих РАЗНЫЙ результат?
                Мы ж уже выяснили, что field - идентификатор, суррогатный ключ и результаты будут ОДИНАКОВЫЕ.
                > Для not null полей скорее всего будут одинаковые планы в обоих случаях.
                Верно.
                > Для полей с null'ом, возможно, count(field) будет не быстрее count(*).
                А тут уже как статистика и индексы лягут.
                Ответить
                • > Мы ж уже выяснили, что field - идентификатор, суррогатный ключ
                  Где мы это выяснили? Вы просто выдвинули предположение "Да, если поле field - идентификатор, то разницы не будет.", к которому у меня никаких претензий нет.

                  >А тут уже как статистика и индексы лягут.
                  Да, согласен с вами, но count(field) в любом случае не будет быстрее count(*).
                  Ответить
        • Если мне память не изменяет, то COUNT(*) делает выборку всех столбцов, а COUNT(`cid`) - только одного... а это уже влияет на быстродействие. Главное, чтобы cid не был NULL, но если это первичный ключ, то он им и не будет.
          Ответить
          • В обоих случаях просто достанется информация из статистики и быстродействие будет одинаковым.
            Ответить
            • >просто достанется информация из статистики
              А кстати так не во всех БД.
              Ответить
              • Ну а на сложных запросах с where и join'ами никакая статистика не поможет. Тут только считать. Причем если поле в count(поле) допускает null, то еще и поля просматривать.

                UPD: Если похапшники всегда пишут count(поле), при этом не написав not null... то мне жалко сервера...
                Ответить
                • Ну даже без сложных запросов есть канонiчный пример: GROUP BY.
                  Ответить
          • count(*) - number of input rows
            count(expression) -number of input rows for which the value of expression is not null
            Ответить

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