Приветствую всех! Прошу помочь с выводом информации из таблицы. Есть таблица raiting : И есть таблица kubki: Необходимо сформировать один запрос так, чтобы была возможность вывести вот такую вот таблицу: То есть, сумма очков по каждой команде на четыре года и + сумма всех очков. Как сделать сумму всех очков на каждую команду и на требуемый год я знаю: PHP: $result = mysql_query("SELECT komanda,SUM(ochki),kubok,title,godtyrnira FROM raiting,kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009' GROUP by komanda ORDER by SUM(ochki) DESC",$db); Общая сумма всех очков на каждую команду: PHP: $result2 = mysql_query("SELECT komanda, SUM(ochki) FROM raiting GROUP by komanda ORDER by SUM(ochki) DESC",$db); А вот как сделать, чтобы выводило все это дело в одной таблице, не могу додуматься, подскажите или покажите пожалуйста.[/php]
Тебе нужно получить вот такой массив. PHP: <?php array('komanda' => array('2009' => 'сумма очков','2010' => 'сумма очков', ... , 'общий' => 'сумма очков')) Тогда сможешь выводить в одной таблице PHP: <?php foreach ($list as $name => $info) { echo $name , $info['2009'], $info['2010'], ... , $info['общий']; }
в PHP пробежаться по результату 1го запроса и в цикле заносить в массив Код (Text): $arr[$row[0]][$row[4]] = $row[1]; Причем первым запросом можно вытащить информацию по годам и командам сразу. достаточно указать GROUP BY komanda, godtyrnira
Что-то у меня с массивом не сложилось ( Попытался запустить запрос вида: [sql]$result2 = mysql_query("SELECT komanda, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009') as 2009sum, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2010') as 2010sum, SUM(ochki) as allsum FROM raiting GROUP by komanda ORDER by allsum DESC",$db);[/sql] Но не получилось (( Вернее получилось, но не выводит сумму по годам. Выводит так: если есть данные по 2010 году, показывать только по 2010. Если есть только по 2009, показывать в столбце только по 2009. А нужно чтобы показывало все сразу. Помогите пожалуйста
Вот дамп и структуры, может кому понадобится. -- -- Структура таблицы `raiting` -- CREATE TABLE IF NOT EXISTS `raiting` ( `id` int(7) NOT NULL auto_increment, `kubok` varchar(255) collate cp1251_general_cs NOT NULL, `ochki` float NOT NULL, `komanda` varchar(255) collate cp1251_general_cs NOT NULL, `liga` varchar(255) collate cp1251_general_cs NOT NULL, `god` int(5) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=1; -- -- Дамп данных таблицы `raiting` -- INSERT INTO `raiting` (`id`, `kubok`, `ochki`, `komanda`, `liga`, `god`) VALUES (1, 'Кубок 1', 0.1, 'Команда 1', '0', 2009), (2, 'Кубок 1', 0.1, 'Команда 2', '0', 2009), (3, 'Кубок 1', 7, 'Команда 1', '0', 2009), (4, 'Кубок 2', 0.1, 'Команда 3', '0', 2009), (5, 'Кубок 2', 0.1, 'Команда 2', '0', 2009), (6, 'Тест 1', 0.1, 'Команда 4', '0', 2009), (7, 'Тест 2', 6, 'Команда 4', '1', 2009); -- -- Структура таблицы `kubki` -- CREATE TABLE IF NOT EXISTS `kubki` ( `id` int(5) NOT NULL auto_increment, `title` varchar(255) collate cp1251_general_cs NOT NULL, `godtyrnira` int(5) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=1 ; -- -- Дамп данных таблицы `kubki` -- INSERT INTO `kubki` (`id`, `title`, `godtyrnira`) VALUES (1, 'Кубок 1', 2009), (2, 'Кубок 2', 2009), (3, 'Кубок 3', 2009), (4, 'Кубок 4', 2009), (7, 'Тест 1', 2010), (8, 'Тест 2', 2010);
Попытался запустить такое вот: PHP: <?php $result = mysql_query("SELECT r.komanda, r.god, sum(ochki) as sum_ochki FROM raiting AS r JOIN kubki AS k ON r.kubok = k.title group by r.komanda,k.godtyrnira",$db); $mydata = array() foreach($result as $row) { $mydata[$row["komanda"],$row["godtyrnira"] = $row["sum_ochki"]; } $n=0; foreach($mydata as $komanda=>$data):?> <tr> <td><?php echo $n+1?></td> <td><?php echo $komanda?></td> <td><?php echo $data["2009"]?></td> <td><?php echo $data["2010"]?></td> <td><?php echo $data["2011"]?></td> </tr> <?php endforeach; ?> Выдает: Parse error: syntax error, unexpected T_FOREACH in /home/datasp/public_html/sum2009.php on line 9
Вроде бы все исправил, но все-равно ничего не получается PHP: <?php $result = mysql_query("SELECT raiting.komanda, raiting.god, sum(ochki) as sum_ochki FROM raiting AS r JOIN kubki AS k ON raiting.kubok = kubki.title group by raiting.komanda,kubki.godtyrnira",$db); $mydata = array(); foreach($result as $row) { $mydata[$row["komanda"]][$row["godtyrnira"]] = $row["sum_ochki"]; } $n=0; foreach($mydata as $komanda=>$data) { ?> <tr> <td><?php echo $n+1;?></td> <td><?php echo $komanda;?></td> <td><?php echo $data["2009"];?></td> <td><?php echo $data["2010"];?></td> <td><?php echo $data["2011"];?></td> </tr> <?php }?> Помогите пожалуйста!!!
Попытался такое запустить, все-равно не хочет работать, не могу додуматься как сделать, помогите пожалуйста. Покажите как его сделать на живом примере, умоляю. Сил уже нету... PHP: <?php $result2 = mysql_query("SELECT komanda, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009') as 2009sum, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2010') as 2010sum, SUM(ochki) as allsum FROM raiting,kubki GROUP by komanda,godtyrnira ORDER by allsum DESC",$db); if (!$result2) { echo "<p><strong>Код ошибки:</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result2) > 0) { $arr = array(); foreach($arr as $myrow) { $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"]; } printf (" <tr> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> </tr> ",$myrow["komanda"],$myrow["2009"],$myrow["2010"],$myrow["allsum"]); } else { echo "<p>В таблице нет записей.</p>"; exit(); } ?>
Выборка происходит в массив mysql_fetch_array из которого можно выводить инфу через переменную к примеру row
Ну я не вижу Ты видишь? Я так подозреваю между 14й и 15й строками ты был должен в цикле выбрать записи в массив $arr
Выводит фигню какую-то: PHP: <?php $result2 = mysql_query("SELECT komanda, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009') as 2009sum, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2010') as 2010sum, SUM(ochki) as allsum FROM raiting,kubki GROUP by komanda,godtyrnira ORDER by allsum DESC",$db); if (!$result2) { echo "<p><strong>Код ошибки:</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result2) > 0) { $myrow2 = mysql_fetch_assoc($result2); $olya=1; do { $myrow2["2009sum"] = round($myrow2["2009sum"],'2'); $myrow2["2010sum"] = round($myrow2["2010sum"],'2'); $myrow2["allsum"] = round($myrow2["allsum"],'2'); printf (" <tr> <td width='50'><div align='center'>$olya</div></td> <td width='70'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> </tr> ",$myrow2["komanda"],$myrow2["2009sum"],$myrow2["2010sum"],$myrow2["allsum"]); $olya = $olya + 1; } while ($myrow2 = mysql_fetch_assoc($result2)); mysql_free_result($result2); } else { echo "<p>В таблице нет записей.</p>"; exit(); } ?> Я не знаю что с ним делать, уже кучу всего перепробовал.
1. Попова выкинуть 2. нормальный пример с php.net PHP: <?php while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["fullname"]; echo $row["userstatus"]; } 3. Твой предпоследний код был фактически рабочим. Нужно только выбрать строки в $arr замени foreach в 15й строке на while как в примере (17ю строку не трогать - оставить как есть)
PHP: <?php $result2 = mysql_query("SELECT komanda, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009') as 2009sum, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2010') as 2010sum, SUM(ochki) as allsum FROM raiting,kubki GROUP by komanda,godtyrnira ORDER by allsum DESC",$db); if (!$result2) { echo "<p><strong>Код ошибки:</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result2) > 0) { $arr = array(); while ($myrow = mysql_fetch_assoc($result2)) { $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"]; } printf (" <tr> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> </tr> ",$myrow["komanda"],$myrow["2009"],$myrow["2010"],$myrow["allsum"]); } else { echo "<p>В таблице нет записей.</p>"; exit(); } ?> Возвращает пустые ячейки Может я не правильно что-то сделал?
Просто надо заниматься отладкой. Для этого в ключевые точки надо добавить вывод промежуточных значений. В цикле var_dump($myrow); // это то что мы выбираем после цикла var_dump($arr); // это результат нашей выборки. И обрати внимание. Что данные ты выбираешь в $arr, а выводить почему-то пытаешься из $myrow
PHP: <?php $result2 = mysql_query("SELECT komanda, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2009') as 2009sum, (SELECT SUM(ochki) FROM kubki WHERE raiting.kubok=kubki.title AND godtyrnira='2010') as 2010sum, SUM(ochki) as allsum FROM raiting,kubki GROUP by komanda,godtyrnira ORDER by allsum DESC",$db); if (!$result2) { echo "<p><strong>Код ошибки:</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result2) > 0) { $arr = array(); while ($myrow = mysql_fetch_assoc($result2)) { $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"]; } printf (" <tr> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> <td width='50'><div align='center'>%s</div></td> </tr> ",$arr["komanda"],$arr["2009"],$arr["2010"],$arr["allsum"]); } else { echo "<p>В таблице нет записей.</p>"; exit(); } ?> Постоянно пустой ответ, чтобы я не делал (( Ужас какой-то. При отладке показывало что есть данные в массиве.
Отлично. Данные в массиве есть. А структуру массива ты не хочешь глянуть? Ведь у тебя нет в нем ключа "komanda" Плюс вывод из многомерного массива тоже требует. Ты ведь хочешь получить не 1 строчку, а много?
Извините пожалуйста, я не знаю как сделать ключ в структуре массива Мне бы хотя бы 1 результат вывести ( Подскажите пожалуйста.