Свернутый текст
PHP |
<?php |
Спустя 5 часов, 31 минута, 47 секунд (24.06.2009 - 06:58) glock18 написал(а):
а что тут говорить - 24 запроса к базе, которые делаются в 1.
Цитата (freed-master @ 23.06.2009 - 22:26) |
${'hit_'.$c} |
а чем массивы не нравятся?
ИМХО развлекаться с $$ следует, если ты работаешь с именами переменных. У тебя здесь это совершенно лишнее.
Спустя 11 минут, 49 секунд (24.06.2009 - 07:10) freed-master написал(а):
А можно хотя бы на словах алгоритм действий... ну никак не пойму эти массивы...
Спустя 1 час, 51 минута, 23 секунды (24.06.2009 - 09:01) kirik написал(а):
Спустя 1 час, 17 минут, 16 секунд (24.06.2009 - 10:18) HardWoman написал(а):
freed-master
Личный вопрос - сколько вам лет? и как вас зовут?
Личный вопрос - сколько вам лет? и как вас зовут?
Спустя 1 час, 13 минут, 9 секунд (24.06.2009 - 11:32) freed-master написал(а):
kirik, спасибо!
Цитата |
Личный вопрос - сколько вам лет? и как вас зовут? |
Вася (серьезно), 19 лет...
Спустя 9 минут, 34 секунды (24.06.2009 - 11:41) glock18 написал(а):
freed-master, мы с тобой тезки и мне тоже постоянно приходится повторять "серьезно" после имени при знакомстве
Спустя 30 минут, 54 секунды (24.06.2009 - 12:12) freed-master написал(а):
Так, кажется ситуация с массивами начинает проясняться, но все же не пойму как их применить к этому счетчику, что именно хранить в массиве? Номера месяцев? Но ведь запросов все равно будет 24?
Спустя 1 час, 2 минуты, 21 секунда (24.06.2009 - 13:14) Alchemist написал(а):
Заранее прошу прощения, но не мог удержаться...
Цитата |
есть ли в коде грубые ошибки? |
грубой ошибкой было браться за этот скрипт.
Спустя 16 секунд (24.06.2009 - 13:15) glock18 написал(а):
Цитата (freed-master @ 24.06.2009 - 09:12) |
Так, кажется ситуация с массивами начинает проясняться, но все же не пойму как их применить к этому счетчику, что именно хранить в массиве? Номера месяцев? Но ведь запросов все равно будет 24? |
дк конечно. запросы можно объединить прямо сейчас. поменяв только поля в select - вдвое меньше запросов. плюс можно вместо цикла в итерации заменить это все на group by в одном запросе. вот и один запрос.
Спустя 27 минут, 28 секунд (24.06.2009 - 13:42) freed-master написал(а):
Очевидно я не знаю про sql-запросы, то что нужно применить? Но даже не представляю в чем именно надо разобраться?
Как и на что заменить COUNT(*), если в одном случае нужно посчитать все записи, а в другом - только повторяющиеся?
Как и на что заменить COUNT(*), если в одном случае нужно посчитать все записи, а в другом - только повторяющиеся?
Спустя 9 минут, 5 секунд (24.06.2009 - 13:51) glock18 написал(а):
Цитата (freed-master @ 24.06.2009 - 10:42) |
Как и на что заменить COUNT(*), если в одном случае нужно посчитать все записи, а в другом - только повторяющиеся? |
а через запятую записать?
Цитата (freed-master @ 24.06.2009 - 10:42) |
Но даже не представляю в чем именно надо разобраться? |
у тебя есть все, чтобы сделать соответствующие выводы. я тебе назвал чем ты можешь заменить. ты знаешь то, что здесь ты используешь select запрос. и то что база mysql. еще то, что эта задача уже миллион раз решалась.
этой информации хватит вполне.
Спустя 1 час, 27 минут, 8 секунд (24.06.2009 - 15:18) freed-master написал(а):
Хоть убейте, не пойму как получить разные результаты и присвоить их двум разным переменным, сделав один запрос?
Спустя 10 минут, 1 секунда (24.06.2009 - 15:28) Kuliev написал(а):
freed-master
В место цикла
В место цикла
PHP |
while ($c <= 12) |
Спустя 15 минут, 16 секунд (24.06.2009 - 15:44) glock18 написал(а):
Kuliev, я че-т не понял. шило на мыло, по-моему.
freed-master, ну вот ты прикинь. Смотри, ты ведь собираешь, скажем, посты или статьи одним запросом. Потом в цикле их разбираешь. Здесь будет так же. Цикл будет, но он будет только получать записи нужные, а запрос будет один.
Ты напиши запрос с group by правильный где-нить в phpmyadmin. там посмотри, что получаешь, и сразу поймешь как получить.
freed-master, ну вот ты прикинь. Смотри, ты ведь собираешь, скажем, посты или статьи одним запросом. Потом в цикле их разбираешь. Здесь будет так же. Цикл будет, но он будет только получать записи нужные, а запрос будет один.
Ты напиши запрос с group by правильный где-нить в phpmyadmin. там посмотри, что получаешь, и сразу поймешь как получить.
Спустя 11 минут, 15 секунд (24.06.2009 - 15:55) Kuliev написал(а):
glock18
Цитата |
Kuliev, я че-т не понял. шило на мыло, по-моему. |
Так будет красивее и практичней ненадо будет делать лишних телодвижений
типа $c = 1; $c++ можно сразу использовать $i. Так сказать меньше ненужных переменных, легче в коде разобраться
PHP |
$c = 1; while ($c <= 12) { |
Спустя 10 минут, 22 секунды (24.06.2009 - 16:05) glock18 написал(а):
Kuliev ну в этом плане то да.
просто здесь обычно уже никто не смотрит на стиль оформления кода. работало бы действительно, не люблю плодить строки на пустом месте и согласен с тобой в этом
просто здесь обычно уже никто не смотрит на стиль оформления кода. работало бы действительно, не люблю плодить строки на пустом месте и согласен с тобой в этом
Спустя 33 минуты, 29 секунд (24.06.2009 - 16:39) freed-master написал(а):
Сначала запрос на выборку, потом цикл с присвоением переменным нужных значений?
Спустя 2 часа, 23 минуты, 35 секунд (24.06.2009 - 19:02) Kuliev написал(а):
freed-master
Я так понял что у тебя будет две строки
1) сколько всего посещений было в конкретный месяц
2) сколько уникальных посещений было в конкретный месяц
Я правильно изложил логику твоего скрипта?
Я так понял что у тебя будет две строки
1) сколько всего посещений было в конкретный месяц
2) сколько уникальных посещений было в конкретный месяц
Я правильно изложил логику твоего скрипта?
Спустя 7 минут, 54 секунды (24.06.2009 - 19:10) freed-master написал(а):
Совершенно, верно. Добавлю только, что отображается статистика за весь текущий год.
Спустя 13 минут, 20 секунд (24.06.2009 - 19:23) kirik написал(а):
Помимо того что написали ребята, я хотел бы обратить внимание на выборку по дате. Ведь не зря в MySQL предусмотрено такое большое количество типов данных, и если ты заносишь данные ввиде даты (при этом у тебя нужный тип поля), то зачем выбирать нужные записи через LIKE запрос? Есть куча разных функций для удобной работы с датой.
Спустя 5 минут, 7 секунд (24.06.2009 - 19:29) freed-master написал(а):
kirik
За "кучу разных фуекций" огромное спасибо!!!
За "кучу разных фуекций" огромное спасибо!!!
Спустя 26 минут, 26 секунд (24.06.2009 - 19:55) glock18 написал(а):
Цитата (freed-master @ 24.06.2009 - 16:29) |
kirik За "кучу разных фуекций" огромное спасибо!!! |
Спустя 14 часов, 16 минут, 48 секунд (25.06.2009 - 10:12) Kuliev написал(а):
freed-master
Решил помочь тебе вот держи запрос теперь думай как его вывести
Решил помочь тебе вот держи запрос теперь думай как его вывести
PHP |
$sql = ("SELECT COUNT(ip) AS total, MONTH (`date`) AS d, COUNT(DISTINCT `ip`) AS hits |
Спустя 6 часов, 38 секунд (25.06.2009 - 16:12) freed-master написал(а):
Kuliev, Респект!!!
Раньше мне не приходилось использовать AS, я и не знал как он работает. Теперь почти понятно!
Что это за двока в GROUP BY? Смотрел мануал но там везде используются имена полей. 2 - это типа номер поля d?
Поправочка: на сколько я знаю уникальный посетитель это host
Раньше мне не приходилось использовать AS, я и не знал как он работает. Теперь почти понятно!
Что это за двока в GROUP BY? Смотрел мануал но там везде используются имена полей. 2 - это типа номер поля d?
Поправочка: на сколько я знаю уникальный посетитель это host
Спустя 10 минут, 55 секунд (25.06.2009 - 16:23) Kuliev написал(а):
freed-master
GROUP BY 2 Это\ номер поля т.е. date можно и его имя написать
AS это псевдоним поля
COUNT(ip) AS total всего посещений в отдельный месяц
MONTH (`date`) AS d - здесь выводятся месяца
COUNT(DISTINCT `ip`) AS hits - Это поле выводит уникальные IP
GROUP BY 2 Это\ номер поля т.е. date можно и его имя написать
AS это псевдоним поля
COUNT(ip) AS total всего посещений в отдельный месяц
MONTH (`date`) AS d - здесь выводятся месяца
COUNT(DISTINCT `ip`) AS hits - Это поле выводит уникальные IP
Спустя 8 часов, 20 минут, 56 секунд (26.06.2009 - 00:44) freed-master написал(а):
Для вывода результатов по всем месяцам сразу надо использовать цикл в цикле?
Спустя 9 минут, 53 секунды (26.06.2009 - 00:54) kirik написал(а):
Цитата (freed-master @ 25.06.2009 - 16:44) |
Для вывода результатов по всем месяцам сразу надо использовать цикл в цикле? |
Чур тебя.. Убери из запроса AND MONTH (`date`)
Спустя 19 часов, 48 минут, 19 секунд (26.06.2009 - 20:43) freed-master написал(а):
Объясните, пожалуйста, что происходит и почему так?
PHP |
... |
Работает только первый цикл, а если его убрать то - второй.
Спустя 36 минут, 26 секунд (26.06.2009 - 21:19) kirik написал(а):
Потому что при проходе первого цикла mysql_fetch_assoc() смещает указатель в результате запроса на последний элемент (так как проходит полный цикл), а при проходе второго mysql_fetch_assoc() возвращается false, так как перемещать указатель уже некуда.
А зачем тебе такая бессмысленная конструкция?
А зачем тебе такая бессмысленная конструкция?
Спустя 33 минуты, 25 секунд (26.06.2009 - 21:52) freed-master написал(а):
Цитата |
А зачем тебе такая бессмысленная конструкция? |
Потому, что более осмысленную конструкцию, которая бы хоть както работала, из моих знаний пока собрать тяжело...
Спустя 6 минут, 17 секунд (26.06.2009 - 21:59) kirik написал(а):
freed-master
Табличку какого вида ты хотел нарисовать?
Табличку какого вида ты хотел нарисовать?
Спустя 8 минут, 1 секунда (26.06.2009 - 22:07) freed-master написал(а):
Свернутый текст
HTML |
<table id="visits" cellpadding="0" cellspacing="0" border="1" width="100%"> <tr> <td></td> <td>Янв</td> <td>Фев</td> <td>Мар</td> <td>Апр</td> <td>Май</td> <td>Июн</td> <td>Июл</td> <td>Авг</td> <td>Сен</td> <td>Окт</td> <td>Ноя</td> <td>Дек</td> <tr> <td align="right">Хиты</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td align="right">Хосты</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> |
Спустя 53 минуты, 42 секунды (26.06.2009 - 23:00) Kuliev написал(а):
freed-master
Вот тебе подсказка
Вот тебе подсказка
PHP |
while ($row = mysql_fetch_assoc($result)) |
Спустя 1 час, 12 минут, 55 секунд (27.06.2009 - 00:13) freed-master написал(а):
Понятно!
Но получается если посетителей в каком то месяце недыло, то в массив ничего не записывается, следовательно при выводе нарушается структура таблицы.
Что если создать многомерный массив, поможет ли?
Но получается если посетителей в каком то месяце недыло, то в массив ничего не записывается, следовательно при выводе нарушается структура таблицы.
Что если создать многомерный массив, поможет ли?
Спустя 9 часов, 21 минута, 11 секунд (27.06.2009 - 09:34) glock18 написал(а):
Цитата (freed-master @ 26.06.2009 - 21:13) |
Но получается если посетителей в каком то месяце недыло, то в массив ничего не записывается, следовательно при выводе нарушается структура таблицы. |
это верно
Цитата (freed-master @ 26.06.2009 - 21:13) |
Что если создать многомерный массив, поможет ли? |
не думаю, что понимаю, о чем ты. вероятно, нет.
эту ситуацию достаточно легко обработать. тебе просто при выводе нужно следить, что значения месяца не "скачут". если скачек видишь - значит надо все пропущенные значения заполнить нулями.
PS: еще, возможно, в mysql можно это как-то красиво обойти, используя что-то типа ifnull и nullif.
Спустя 16 минут, 40 секунд (27.06.2009 - 09:51) freed-master написал(а):
Цитата |
не думаю, что понимаю, о чем ты |
Цитата |
нужно следить, что значения месяца не "скачут". |
Вариант который предложил Kuliev - это три разных массива. ведь они между собой никак не связаны? "Скачки" будут отслеживаться в одном массиве, а инфо для вывода в другом, наверно их надо както объединить или связать между собой?
Спустя 2 часа, 2 минуты, 5 секунд (27.06.2009 - 11:53) Kuliev написал(а):
freed-master
Ты правильно подметил, 3 разных массива, но с одинаковыми ключами (в этом вся фишка)
Ты правильно подметил, 3 разных массива, но с одинаковыми ключами (в этом вся фишка)
Спустя 1 час, 7 минут, 55 секунд (27.06.2009 - 13:01) freed-master написал(а):
Т.е. нужно:
1) перебрать массив $date[]
2) если разница между значениями массива больше 1, то получить ключ этого значения
3) записать в массивы $total[] и $hits[] значение 0 с полученным ранее ключем
1) перебрать массив $date[]
2) если разница между значениями массива больше 1, то получить ключ этого значения
3) записать в массивы $total[] и $hits[] значение 0 с полученным ранее ключем
Спустя 20 минут, 10 секунд (27.06.2009 - 13:21) Kuliev написал(а):
freed-master
$date[0] = 06; $total[0] = 5; $hits[0] = 4;
$date[1] = 07; $total[1] = 3; $hits[1] = 1;
$date[2] = 10; $total[2] = 5; $hits[2] = 4;
В массиве $date хранится число месяца, вот и подумай как его разобрать так как тебе надо.
$date[0] = 06; $total[0] = 5; $hits[0] = 4;
$date[1] = 07; $total[1] = 3; $hits[1] = 1;
$date[2] = 10; $total[2] = 5; $hits[2] = 4;
В массиве $date хранится число месяца, вот и подумай как его разобрать так как тебе надо.
Спустя 53 минуты, 3 секунды (27.06.2009 - 14:14) freed-master написал(а):
т.е. ход мыслей был правильный? или ничего записывать в массивы не надо?
Спустя 34 минуты, 13 секунд (27.06.2009 - 14:49) freed-master написал(а):
Пытался чтото сообразить, но получается какой-то бред...
PHP |
foreach ($date as $key => $value) |
Кажется я чего-то основательно не понимаю...
Спустя 3 часа, 6 минут, 6 секунд (27.06.2009 - 17:55) kirik написал(а):
freed-master
Давай по пунктам, как ты думашь, как php отработает твой код? Рассказывай в слух.
Давай по пунктам, как ты думашь, как php отработает твой код? Рассказывай в слух.
Спустя 47 минут, 49 секунд (27.06.2009 - 18:42) glock18 написал(а):
Цитата (freed-master @ 27.06.2009 - 11:49) |
$i++ |
kirik прав. с этим не балуйся лишнего. лучше почитай что это такое и чем отличается $i++ от ++$i
Спустя 47 минут, 58 секунд (27.06.2009 - 19:30) freed-master написал(а):
Цитата |
чем отличается $i++ от ++$i |
А страничку не подскажите? или как это называется чтоб найти?
PHP |
foreach ($date as $key => $value) |
Спустя 2 часа, 31 минута, 54 секунды (27.06.2009 - 22:02) glock18 написал(а):
Цитата (freed-master @ 27.06.2009 - 16:30) |
if ($value[$i++]-$value[$i]!=1) /* Теперь нужно сравнить Значения следующего элемента с предыдущим Я пытался сделать это вычитанием, где и запутался... */ |
увы, это совсем не так. $i++ и ++$i - инкрементация. Каждая из них увеличивает переменную на один.
То есть
PHP |
$i++; |
PHP |
++$i; |
и
PHP |
$i = $i + 1; |
в принципе, одно и то же.
различия начинаются, когда ты вставляешь инкремент в другое выражение (как у тебя).
Парадокс в том, что у тебя здесь вычитается не из i+1 элемента i, а наоборот
Смотри как рассчитывается это выражение:
допустим, $i = 3;
1. транслятор встречает выражение $value[$i++]. Это сложное выражение, а значит разбирает его по частям.
2. соответственно, разбирает единственное входящее в него выражение - $i++.
3. разбор его такой: выражение возвращает текущее значение $i, а потом увеличивает $i на 1.
то есть $value[$i++] будет таким: $value[3]. Но! $i после этого оператора уже 4.
4. далее соответственно разбирается $value[$i], а так как $i уже равен 4,то будет взято $value[4]
если использовать оператор ++$i, то поведение с
Цитата |
выражение возвращает текущее значение $i, а потом увеличивает $i на 1. |
изменится на
Цитата |
сначала увеличивается $i на 1, а потом возвращается его полученное значение |
то есть если бы поставил ++$i, то у тебя бы вычитались $value[4] - $value[4] (по примеру).
так как ты хочешь просто вычесть из следующего текущий, то лучше вообще не использовать здесь инкремент, хотя можно и с ним.
лучше просто:
$value[$i + 1] - $value[$i]...
$i++; // увеличиваешь перед следующей итерацией
Спустя 32 минуты, 35 секунд (27.06.2009 - 22:35) freed-master написал(а):
Но выводит все равно только 2 элемента...
Добавил запись нуля не только в $total, но и в $date, но ведь теперь нужно запустить цикл заново, а это реально?
Добавил запись нуля не только в $total, но и в $date, но ведь теперь нужно запустить цикл заново, а это реально?
PHP |
$i=1; |
Спустя 1 час, 42 минуты, 33 секунды (28.06.2009 - 00:17) glock18 написал(а):
Понятно. Весь код покажи...
Спустя 9 часов, 8 минут, 36 секунд (28.06.2009 - 09:26) freed-master написал(а):
Свернутый текст
PHP |
$year = isset($_GET['y'])?($_GET['y']):date("Y"); |
Спустя 4 часа, 45 минут, 59 секунд (28.06.2009 - 14:12) glock18 написал(а):
PHP |
if (($year-1) >= 2008) |
не надо так. а то индусом будут называть за такие выражения так ведь можно
PHP |
if ($year >= 2009) |
аналогично
PHP |
if (($year+1) <= (date("Y")+1)) |
почему бы не убрать единички?
в данном контексте лучше это
PHP |
// здесь кстати массивы надо инициализировать обязательно |
делать немного по-другому. примерно так
PHP |
$stats = array(): |
после этого у тебя в $stats ключ - это месяц к которому элемент хранит статистику.
PHP |
foreach ($date as $key => $value) |
это лучше не форичем, я думаю. хотя можно и им. лучше всего, думаю, с for:
PHP |
for($month = 1; $month <= 12; $month++) |
так просто "дырочки заделали", и все
после таких манипуляций получишь то, что надо. только выводить этот массив потом не через foreach (хотя я не уверен). Дело в том, что элементы будут выведены в том же порядке, в котором были назначены, а не 1, 2...12. лучше так же for'ом вывести.
Спустя 2 часа, 31 минута, 14 секунд (28.06.2009 - 16:43) freed-master написал(а):
Цитата |
почему бы не убрать единички? |
Наверно потому, что эта конструкция расчитана не на три года, а больше... но показывает только настоящий, предыдущий и последующий... но только из истории (там где заполнено)...
Цитата |
Дело в том, что элементы будут выведены в том же порядке, в котором были назначены |
А можно ли задать сортировку по ключу для sort()?
Спустя 20 минут, 45 секунд (28.06.2009 - 17:04) freed-master написал(а):
Ура! Сделал for-ом:
PHP |
for($month = 1; $month <= 12; $month++) |
Как все-таки приятно, когда хоть до чего-то додумался сам!!!
ВСЕМ СПАСИБО!
Эх, было бы у меня много денег - каждого бы на wmz отблагодарил
Спустя 13 минут, 16 секунд (28.06.2009 - 17:17) glock18 написал(а):
Цитата (freed-master @ 28.06.2009 - 13:43) |
Наверно потому, что эта конструкция расчитана не на три года, а больше... |
я не про те единички, а про единички в выражении if - они сокращаются. без них выражение будет абсолютно эквилентно, и долговременность тут совершенно не при чем.
_____________
Всем, кто заинтересован, могу помочь начать зарабатывать на forex.
Пишите в личку или на e-mail: flash-dirt@yandex.ru