- 1
- 2
- 3
- 4
- 5
- 6
$res = mysql_query('select `date` from `pic`');
while($data = mysql_fetch_row($res)){
if(date('d.m.y') != date('d.m.y',$data[0])) continue;
$countPicToday++;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+164
$res = mysql_query('select `date` from `pic`');
while($data = mysql_fetch_row($res)){
if(date('d.m.y') != date('d.m.y',$data[0])) continue;
$countPicToday++;
}
Не понятно. Почему нельзя было использовать COUNT() и WHERE
bormand 21.06.2013 05:54 # +5
roman-kashitsyn 21.06.2013 06:07 # 0
Временный код, пока автор не напишет свою субд на πхπ
bormand 21.06.2013 06:43 # +2
someone 21.06.2013 07:34 # +14
O(π×π)
И произносится хороно: пижды пи.
myaut 21.06.2013 08:34 # +4
1024-- 21.06.2013 11:49 # +2
3Doomer 21.06.2013 13:47 # +2
Скоро, во всех браузерах страны.
eth0 21.06.2013 06:16 # 0
Lure Of Chaos 21.06.2013 08:19 # 0
bormand 21.06.2013 08:51 # +7
inkanus-gray 21.06.2013 08:49 # 0
bormand 21.06.2013 08:52 # 0
inkanus-gray 21.06.2013 08:58 # +1
В InnoDB же нет никакой разницы, есть WHERE или нет, потому что в любом случае строки придётся пересчитывать.
Это и послужило почвой для «жёлтых» статей с заголовками типа «В InnoDB COUNT() тормозит!!!11адын-адын-адын».
bormand 21.06.2013 10:07 # +1
inkanus-gray 21.06.2013 11:19 # +2
• потому что в MySQL функция DATE_FORMAT() и сравнение строк тормозят;
• в PHP был вызов date_default_timezone_set, поэтому DATE_FORMAT() и date() возвращают разные результаты.
AlexP 21.06.2013 11:36 # +2
Sh1tM4ker 21.06.2013 13:12 # 0
WHERE date >= mktime(0,0,0) AND date < mktime(0,0,0) + 86400
inkanus-gray 21.06.2013 13:24 # +1
Во-вторых, mktime не нужно, потому что сравниваются две готовые даты.
В-третьих, в SQL есть и функция DATE(), округляющая до целой даты, и выражение "+1 day", так что высчитывать количество секунд в сутках не нужно.
Sh1tM4ker 21.06.2013 14:02 # 0
2. Не понял, что значит "две готовые даты". Судя по запросу date имеет тип int.
3. DATE "огругляет", да. Прощайте индексы.
wvxvw 21.06.2013 15:46 # +3
Тру ПХП-вей: вместо того, чтобы заглянуть в документацию, написать самому.
bormand 21.06.2013 17:10 # 0
Sh1tM4ker 21.06.2013 17:37 # −1
wvxvw 21.06.2013 20:46 # +2
Ну а вообще, я сторонник языков, где скобки однозначно влияют на смысл :) и в произвольном порядке их не расставить.
inkanus-gray 21.06.2013 16:32 # +1
2. Виноват, не подумал о том, что mktime с опущенными аргументами как раз возвращает текущую дату, округлённую до нужного состояния. В Вашем выражении надо уточнить, что mktime — функция PHP, а не SQL.
3. А мы будем округлять не поле date, а текущее время. Тогда с индексами будет всё нормально.
Итого:
Или, если MySQL и PHP работают по одному времени, то
guest 21.06.2013 18:54 # −5
//это не спам. Просто чтобы побольше людей увидело. Не удаляйте, пожалуйста.
bormand 21.06.2013 19:21 # −1
eth0 21.06.2013 19:41 # 0
bormand 21.06.2013 20:05 # +1
defecate-plusplus 21.06.2013 20:28 # 0
eth0 21.06.2013 20:49 # +1
Abbath 25.06.2013 05:22 # +1
nkarakin 26.06.2013 04:12 # +2