Задумал очень трудоёмкий и новый для себя проект - статистику. Вопрос в том, куда лучше собирать данные по этой статистике? Задумано примерно следующее: http://stat.hl2.com.ua/ Тоесть, будет таблица со списком имён и какими-то графами, которая будет храниться в виде таблицы в БД и будет обновляться раз в неделю вручную через админку. Если кликнуть по какому-нибудь имени в таблице, то можно будет просмотреть лог его статистики за всё время. Вот тут и загвоздка - куда все эти логи по всем людям писать? Если в БД, то получается, что нужно делать отдельную таблицу для каждого человека. Как тогда добавлять нового человека через форму на сайте? Возможно ли создать новую таблицу в БД посредством PHP? Если писать статистику в файлы, то встаёт вопрос вытаскивания и обработки этой инфы в виде сплошного, бесформенного текста - тут я полный ноль. Никогда не работал с файлами, не знаю как их писать и читать. В общем, что посоветуете? =\
еще один. Психостат бесплатно распространяемый скрипт. Нах писат то что уже есть? тем более если для тебя запись/чтение файлов проблема.
Психостат это просто как пример. Мне не психостат нужен, а совсем другое. Тут вроде форум по PHP, а не по кс. Я задал конкретные вопросы: Возможно ли создать новую таблицу в БД посредством PHP? Стоит ли это делать, или лучше реализовать запись в файлы?
А что другое? Если ты хочешь написать то, чего еще никто не делал, то надо бы хотя бы пхп нормально знать и как подойти к такой задачи. Лог чего именно? Статистики чего именно? Вход-выход на сервер, количество фрагов, коефициент попадания, коеф. попадания в опр. часть тела, рейтинг, и пр..
Если для вас настолько напряжно помочь новичку, то зачем тогда вообще заходить в раздел "Программирование на PHP для новичков" и советовать готовые решения, упрекая незнанием языка? Абсолютно не важно что я собираюсь собирать. Есть главная таблица со списком имён - это таблица в бд №1. И есть ещё куча таблиц по каждому человеку отдельно - это либо таблицы в бд, либо файлы. Это всё что нужно знать.
Апельсин Конечно да. Но, по мойму, лучше попробвать плодить историю статистики для каждого пользователя в одной таблице, а не создовать для каждого пользователя свою. И в этой же таблице вести всю статистику. И из не же брать статистику для вывода по всем пользователям: при запросе в БД выбрать статистику по самой последней свежей дате. Это уже другой вопрос. Думаю будет удобно создать функцию (или доп.метод) для записи статистики в БД. Примерно: Код (Text): function ( $stat_type, $stat_value ) { # код записи статистики в БД } И далее просто поставлять в нужные участи кода эту функцию с нужными параметрами.
`p r o x y, да, наверно читать из одной таблицы приаттачив WHERE name= будет проще, спасибо. Единственное но - статистика будет интегрирована с уже готовым модулем сайта, который будет автоматически добавлять новые записи только с именем, проставляя во во всех доп.данных "--". Поэтому корневую таблицу мне всё-же наверно придётся делать второй таблицей в бд... это надо со стороны админки обдумать.) Всё же, с технической стороны, как реализовать отсев по последней дате? К примеру, я хочу, чтобы главная таблица у меня выглядела так: Имя - Кол-во выполненных отчётов - Последняя дата обновления статистики Борис - 46 (+6 с прошлой недели) - 24.07.10 Тоесть, вытаскиваются все имена, а потом по каждому имени проходит цикл, внутри которого ищется последняя дата? Что-то пока не могу представить себе это в виде кода. =\
-приведу пример для таблицы логов со структурой: log_user-код пользователя log_date-дата добавления статистики log_stattype-тип или вид статистики(вход в систему, добавление отчетов etc.) Тогда чтобы получить статистику по всем видам выполняем запрос select log_user,log_stattype,log_max(log_date) as lastdate ,count(*) as nwork from log group by log_user,log_stattype order by log_user; Получим набор записей, где lastdate-последняя дата обновления статистики по определенному типу для определенного пользователя, nwork-количество записей для определенного вида статистик и для определенного пользователя, Если хочешь получить по определенному виду статистики, запрос : select log_user,log_max(log_date) as lastdate ,count(*) as nwork from log where log_stattype='код требуемого вида статистики' group by log_user order by log_user;
Я ни слова не понял, если честно.)) Приведу более конкретный пример, надеюсь получить более конкретный ответ. Собссна, таблица выглядит так: http://red-squadron.ru/index.php?ind=stats Код корневой таблицы, не углубляясь в подробности: PHP: $output = " <tr> <td> <table width='100%' border='1' cellpadding='0' cellspacing='0'> <tr> <td align='center' bgcolor='#E9E9E9'>Score</td> <td align='center' bgcolor='#E9E9E9'>Имя</td> <td align='center' bgcolor='#E9E9E9'>R</td> <td align='center' bgcolor='#E9E9E9'>Убийств</td> <td align='center' bgcolor='#E9E9E9'>Онлайн</td> <td align='center' bgcolor='#E9E9E9'>Updated</td> </tr> "; [b]$DB->query( "SELECT * FROM mkp_stats ORDER BY date");[/b] while( $row = $DB->fetch_row($query) ) { $id = $row['id']; $ide = $row['ide']; $name = $row['name']; $r = $row['r']; $kills = $row['kills']; $online = $row['online']; $date = $row['date']; $score=$r+$kills; $output .= " <tr> <td>$score</td> <td><a href='index.php?ind=stats&ide=$ide'>$name</a></td> <td>$r</td> <td>$kills</td> <td>$online</td> <td>$date</td> </tr> "; } $output .= " </tr> </table> </td> </tr>"; Dr. Manhattan тут имеет 3 записи. Как сделать, чтобы выдавалась только последняя по дате?
Freakmeister LIMIT 1 [sql]"SELECT * FROM mkp_stats ORDER BY date LIMIT 1"[/sql] Документация Если есть возможность подправить модуль и использовать 1 таблицу вместо 2ух, имхо, будет меньше путаницы ....хм...хотя не факт ) А зря, runner дело говорит, советую разобраться.[/quote]
Я и так и использую одну таблицу.) LIMIT 1 тут не прокатит, ибо придётся всё делать по-другому: 1. Сначала посчитать количество уникальных идентификаторов для каждого имени (ide). 2. Потом вывести эти идентификаторы куда-нибудь, в массив наверно. =\ 3. Циклом для каждого ide сделать запрос "SELECT * FROM mkp_stats WHERE ide=$ide ORDER BY date LIMIT 1" Но я надеюсь, что есть способ попроще. =\
Freakmeister Как помню, из задачи, статистика обновляется раз в неделю. Соответсвенно, на каждую дату обновления для каждого пользователя в таблице будет статистика. Примерно так: Код (Text): --------------------------------------------------------- | user_name | stat_info1 | date | --------------------------------------------------------- | User1 | 20 | 2010-07-01 00:00:00 | | User2 | 25 | 2010-07-01 00:00:00 | | User1 | 45 | 2010-07-08 00:00:00 | | User2 | 25 | 2010-07-08 00:00:00 | | User1 | 78 | 2010-07-15 00:00:00 | | User2 | 100 | 2010-07-15 00:00:00 | --------------------------------------------------------- В этом случае, выборка по дате с LIMIT 1, будет работать правильно. Конечно, вместо user_name лучше использовать user_id (если есть таблица пользователей).
В таком виде работает: PHP: $DB->query( "SELECT *, ($form_score) AS score FROM mkp_stats s1 WHERE NOT EXISTS (SELECT * FROM mkp_stats s2 WHERE s1.ide = s2.ide AND s1.date < s2.date) ORDER BY $order"); У меня тут появилась более сумасшедшая идея. Пока не могу придумать как её реализовать, и вообще не уверен, что это можно сделать через SELECT одним запросом. Буду признателен за совет или идею. Собственно, в таблице есть графа kills, я хочу чтобы в ней писалось не только кол-во убийств, а в скобках ещё сколько игрок наверстал с прошлого обновления статистики. Например, в таком виде: Убийства: 141234 (+117). По идеи, тут надо вытаскивать последнюю запись, потом предпоследнюю запись и вычитать из последней предпоследнюю. Пока не могу даже себе представить как вытащить предпоследнюю запись... внутри цикла while( $row = $DB->fetch_row($query) ) { делать ещё одно обращение к бд нельзя?