"PHP" / Говнокод #10966 Ссылка на оригинал

0

  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 domaster, (Updated )

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

  • Сферическое 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
          Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8