Доброе утро, уважаемые программисты. У меня есть сайт с табличными данными покера (ну, увлекаемся с друзьями, интересно же знать кто сколько и когда). Так вот. Сейчас там используется файловая база данных. Сейчас объясню, что это такое. Когда я только только создал сайт, я столкнулся с проблемой добавления новых игроков в базе MySQL. Меня охватила паника - как это сделать??? Поэтому я сачконул и сделал так: 1) Все имена игроков записываются в файлы по типу player[N].nm. Соответственно, в отдельном файле players.cou я храню общее количество игроков 2) Все дни, в которые мы играли в покер, я храню в файлах day[M].day, в котором записана дата игры (2.06.2012, 4.07.2012 и т.д.). Соответственно, в отдельном файле days.cou я храню общее количество сыгранных нами дней. 3) КОНЕЧНЫЙ РЕЗУЛЬТАТ (то есть, не то количество денег, которое он выиграл, а то, которое у него стало на данный момент) я записывал в файлы p[N]d[M].mon. Пример: человек начал только вот играть 1.01.01 и он проиграл 10 рублей, следовательно, в статистику на 1.01.01 будет записано -10. Он 2.02.02 проиграл 12 рублей, следовательно, в статистику на 2.02.02 у него будет записано НЕ -12, а -22! Вот о чем я говорю. Так вот. В чем моя проблема. Мне надоело всё дело хранить в файлах, потому что надоело качать по 700 файлов результатов. + долго страница загружается (на странице 2 цикла: 1 цикл формирует шапку, второй - двойной. наружный for для дней, внутренний - для игроков (формирование файла p[N]d[M].mon)). Я создал базу и в ней 3 таблицы: Таблица №1 [Имена игроков]: {ID | Имя игрока} - id | player Таблица №2 [Даты]: {ID | Дата} - id | day Таблица №3 (самая важная) [Игры]: {ID | ID игрока | ID дня | Результат} - id | player_id | day_id | result Примерная структура третьей таблицы: Так вот. Я никак не могу подобрать запрос (или ряд запросов) MySQL, чтобы вывести все данные таблицы, как это сейчас выведено на сайте http://pokerstat.hol.es. Ну, цвета не обязательно, НО главное, чтобы было выведено так, как сейчас выглядит главная страница сайта. Очень прошу кого-нибудь помочь с запросами. P.S. Если хотите - можете посмотреть на сайте на интересную диаграмму Она внизу таблицы Заранее, огромное спасибо!
Тут не нужен хитрый запрос. Простой GROUP BY день, игрок (в таблице №3). Первый этап: считывание записей. Потребуется небольшая обработка результатов на PHP: массивы "счетчиков" для колонок и для столбцов. Всего три массива -- $data[y][x], $rows[y], $cols[x] Код (PHP): $result = $db->query( "SELECT ". " `player_id` AS `name`, ". " `day_id` AS `date`, ". " COUNT(*) AS `count`, ". " SUM(`result`) AS `score` ". "FROM `table3` ". "GROUP BY `player_id`, `day_id`" ); $cols = $rows = $data = array(); while ($a = $db->fetchAssoc($result)) { $y = $a['date']; $x = $a['name']; $count = $a['count']; $score = $a['score']; $cols[$x] = (isset($cols[$x]) ? $cols[$x] : 0) + $count; $rows[$y] = (isset($rows[$y]) ? $rows[$y] : 0) + $count; $data[$y][$x] = $score; } Второй этап: вывод таблицы. С заголовками таблицы всё просто: это значения из $rows и $cols. Тело таблицы: вложенные циклы foreach() по массивам $rows и $cols, вывод пересечения $data[$y][$x] если такое существует или прочерк если не существует. Код (PHP): <table> <thead> <tr> <td>ДНИ</td> <?php foreach ($cols as $y => $col_value): ?> <th scope="col"><?= $y ?><br>(<?= $col_value ?>)</th> <?php endforeach; ?> </tr> </thead> <tbody> <?php foreach ($rows as $y => $line_value): ?> <tr> <th scope="row"><sup><?= $line_value ?></sup> <?= $y ?></th> <?php foreach ($cols as $x => $col_value): if (isset($data[$y][$x])): ?> <td><?= $data[$y][$y] ?></td> <?php else: ?> <td>--</td> <?php endif; endforeach; ?> </tr> <?php </tbody> </table> endforeach; Как-то так.
в твоих словах чую недоверие я 8() ты вникай. как таблица рисуется вложенными циклами понятно? пойми как работает group-by, а больше тут ничего и нет. Добавлено спустя 1 минуту 38 секунд: я правда не стал заострять внимание на том, что player_id это не имя, а номер. но с этим ты сам справишся потом
А вот у меня такой вопрос... У меня есть столбец в таблице, где через запятую перечисляются пользователи: user1,user2,users3 Мне нужно вывести только те строки, где в ячейках есть user2. Как осуществить такой SELECT? Добавлено спустя 1 минуту 25 секунд: Кстати, да. Переход осуществил на MySQL своего покерного сайта. Если хотите, можете зайти посмотреть http://pokerstat.hol.es
Веб-сайт pokerstat.hol.es содержит элементы с других сайтов, которые, по нашим данным, являются фишинговыми. Фишинговые сайты обманом получают от пользователей личную или финансовую информацию, выдавая себя за сайты доверенных учреждений, например банков. Хром