За последние 24 часа нас посетили 19214 программистов и 1621 робот. Сейчас ищут 1058 программистов ...

Вывод нескольких запросов в html таблицу

Тема в разделе "MySQL", создана пользователем AloKvadro, 7 фев 2010.

  1. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Приветствую всех!
    Прошу помочь с выводом информации из таблицы.
    Есть таблица raiting :

    [​IMG]

    И есть таблица kubki:

    [​IMG]

    Необходимо сформировать один запрос так, чтобы была возможность вывести вот такую вот таблицу:

    [​IMG]

    То есть, сумма очков по каждой команде на четыре года и + сумма всех очков.

    Как сделать сумму всех очков на каждую команду и на требуемый год я знаю:
    PHP:
    1.  
    2.  $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);
    3.  
    Общая сумма всех очков на каждую команду:
    PHP:
    1.  
    2. $result2 = mysql_query("SELECT komanda, SUM(ochki) FROM raiting GROUP by komanda ORDER by SUM(ochki) DESC",$db);
    3.  

    А вот как сделать, чтобы выводило все это дело в одной таблице, не могу додуматься, подскажите или покажите пожалуйста.[/php]
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Тебе нужно получить вот такой массив.
    PHP:
    1. <?php
    2. array('komanda' => array('2009' => 'сумма очков','2010' => 'сумма очков', ... , 'общий' => 'сумма очков'))
    Тогда сможешь выводить в одной таблице

    PHP:
    1. <?php
    2. foreach ($list as $name => $info) {
    3.     echo $name , $info['2009'], $info['2010'], ... , $info['общий'];
    4. }
     
  3. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Simpliest
    Спасибо большое :)
    Но я не очень понимаю, как мне его получить ) Тыкните носом, пожалуйста )
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    в PHP пробежаться по результату 1го запроса и в цикле заносить в массив
    Код (Text):
    1. $arr[$row[0]][$row[4]] = $row[1];
    Причем первым запросом можно вытащить информацию по годам и командам сразу.
    достаточно указать GROUP BY komanda, godtyrnira
     
  5. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Что-то у меня с массивом не сложилось (

    Попытался запустить запрос вида:

    [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. А нужно чтобы показывало все сразу.

    Помогите пожалуйста
     
  6. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Вот дамп и структуры, может кому понадобится.

    --
    -- Структура таблицы `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);
     
  7. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Попытался запустить такое вот:

    PHP:
    1. <?php
    2.                      
    3. $result = mysql_query("SELECT r.komanda, r.god, sum(ochki) as sum_ochki
    4. FROM raiting AS r
    5. JOIN kubki AS k ON r.kubok = k.title
    6. group by r.komanda,k.godtyrnira",$db);
    7.  
    8. $mydata = array()
    9. foreach($result as $row)
    10. {
    11. $mydata[$row["komanda"],$row["godtyrnira"] = $row["sum_ochki"];
    12. }
    13. $n=0;
    14. foreach($mydata as $komanda=>$data):?>
    15. <tr>
    16. <td><?php echo $n+1?></td>
    17. <td><?php echo $komanda?></td>
    18. <td><?php echo $data["2009"]?></td>
    19. <td><?php echo $data["2010"]?></td>
    20. <td><?php echo $data["2011"]?></td>
    21. </tr>
    22. <?php endforeach; ?>
    Выдает:
    Parse error: syntax error, unexpected T_FOREACH in /home/datasp/public_html/sum2009.php on line 9
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В чем набираем код?

    На всякий случай напомню, каждая команда PHP должан завершаться ;
     
  9. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Вроде бы все исправил, но все-равно ничего не получается

    PHP:
    1. <?php
    2.                      
    3. $result = mysql_query("SELECT raiting.komanda, raiting.god, sum(ochki) as sum_ochki
    4. FROM raiting AS r
    5. JOIN kubki AS k ON raiting.kubok = kubki.title
    6. group by raiting.komanda,kubki.godtyrnira",$db);
    7.  
    8. $mydata = array();
    9. foreach($result as $row)
    10. {
    11. $mydata[$row["komanda"]][$row["godtyrnira"]] = $row["sum_ochki"];
    12. }
    13. $n=0;
    14. foreach($mydata as $komanda=>$data)
    15. {
    16. ?>
    17. <tr>
    18. <td><?php echo $n+1;?></td>
    19. <td><?php echo $komanda;?></td>
    20. <td><?php echo $data["2009"];?></td>
    21. <td><?php echo $data["2010"];?></td>
    22. <td><?php echo $data["2011"];?></td>
    23. </tr>
    24. <?php }?>
    25.  

    Помогите пожалуйста!!!
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Что именно не получается?
     
  11. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Попытался такое запустить, все-равно не хочет работать, не могу додуматься как сделать, помогите пожалуйста. Покажите как его сделать на живом примере, умоляю. Сил уже нету...

    PHP:
    1. <?php
    2.                      
    3. $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);
    4.  
    5.  
    6. if (!$result2)
    7. {
    8. echo "<p><strong>Код ошибки:</strong></p>";
    9. }
    10.  
    11. if (mysql_num_rows($result2) > 0)
    12. {
    13. $arr = array();
    14. foreach($arr as $myrow)
    15. {
    16. $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"];
    17.  
    18. }
    19.                    <tr>
    20.                      <td width='50'><div align='center'>%s</div></td>
    21.                       <td width='50'><div align='center'>%s</div></td>
    22.                       <td width='50'><div align='center'>%s</div></td>
    23.                       <td width='50'><div align='center'>%s</div></td>
    24.                       </tr>
    25.                  ",$myrow["komanda"],$myrow["2009"],$myrow["2010"],$myrow["allsum"]);
    26.  
    27. }
    28.  
    29. else
    30. {
    31. echo "<p>В таблице нет записей.</p>";
    32. exit();
    33. }
    34.  
    35.  
    36.  
    37.  ?>
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Пссс.
    Не торопись.

    Как происходит выборка из базы ты знаешь?
     
  13. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Выборка происходит в массив mysql_fetch_array из которого можно выводить инфу через переменную к примеру row
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вот. И где ты это делаешь?
     
  15. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Нигде?
     
  16. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну я не вижу :) Ты видишь? :)

    Я так подозреваю между 14й и 15й строками ты был должен в цикле выбрать записи в массив $arr :)
     
  17. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Я не знаю как это сделать ( Помогите, прошу.
     
  18. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  19. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Выводит фигню какую-то:
    PHP:
    1.  <?php
    2.                      
    3. $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);
    4.  
    5.  
    6. if (!$result2)
    7. {
    8. echo "<p><strong>Код ошибки:</strong></p>";
    9. }
    10.  
    11. if (mysql_num_rows($result2) > 0)
    12. {
    13. $myrow2 = mysql_fetch_assoc($result2);
    14. $olya=1;
    15.  
    16. do
    17. {
    18. $myrow2["2009sum"] = round($myrow2["2009sum"],'2');
    19. $myrow2["2010sum"] = round($myrow2["2010sum"],'2');
    20. $myrow2["allsum"] = round($myrow2["allsum"],'2');
    21.                    <tr>
    22.                      <td width='50'><div align='center'>$olya</div></td>
    23.                      <td width='70'><div align='center'>%s</div></td>
    24.                      <td width='50'><div align='center'>%s</div></td>
    25.                       <td width='50'><div align='center'>%s</div></td>
    26.                       <td width='50'><div align='center'>%s</div></td>
    27.                       </tr>
    28.                  ",$myrow2["komanda"],$myrow2["2009sum"],$myrow2["2010sum"],$myrow2["allsum"]);
    29. $olya = $olya + 1;
    30. }
    31.  
    32. while ($myrow2 = mysql_fetch_assoc($result2));
    33. mysql_free_result($result2);
    34.  
    35. }
    36.  
    37. else
    38. {
    39. echo "<p>В таблице нет записей.</p>";
    40. exit();
    41. }
    42.  
    43.  
    44.  
    45.  ?>
    Я не знаю что с ним делать, уже кучу всего перепробовал.
     
  20. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    1. Попова выкинуть

    2. нормальный пример с php.net
    PHP:
    1. <?php
    2. while ($row = mysql_fetch_assoc($result)) {
    3.     echo $row["userid"];
    4.     echo $row["fullname"];
    5.     echo $row["userstatus"];
    6. }
    3. Твой предпоследний код был фактически рабочим. Нужно только выбрать строки в $arr
    замени foreach в 15й строке на while как в примере (17ю строку не трогать - оставить как есть)
     
  21. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    PHP:
    1. <?php
    2.                        
    3.   $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);
    4.  
    5.  
    6.   if (!$result2)
    7.   {
    8.   echo "<p><strong>Код ошибки:</strong></p>";
    9.   }
    10.  
    11.   if (mysql_num_rows($result2) > 0)
    12.  {
    13.  $arr = array();
    14.   while ($myrow = mysql_fetch_assoc($result2))
    15.   {
    16.   $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"];
    17.  
    18.   }
    19.   printf ("
    20.                      <tr>
    21.                        <td width='50'><div align='center'>%s</div></td>
    22.                        <td width='50'><div align='center'>%s</div></td>
    23.                        <td width='50'><div align='center'>%s</div></td>
    24.                        <td width='50'><div align='center'>%s</div></td>
    25.                        </tr>
    26.                    ",$myrow["komanda"],$myrow["2009"],$myrow["2010"],$myrow["allsum"]);
    27.  
    28.   }
    29.  
    30.   else
    31.   {
    32.   echo "<p>В таблице нет записей.</p>";
    33.   exit();
    34.   }
    35.  
    36.  
    37.  
    38.    ?>
    Возвращает пустые ячейки :( Может я не правильно что-то сделал?
     
  22. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Просто надо заниматься отладкой.

    Для этого в ключевые точки надо добавить вывод промежуточных значений.

    В цикле
    var_dump($myrow); // это то что мы выбираем

    после цикла
    var_dump($arr); // это результат нашей выборки.

    И обрати внимание. Что данные ты выбираешь в $arr, а выводить почему-то пытаешься из $myrow
     
  23. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    PHP:
    1. <?php
    2.                        
    3.   $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);
    4.  
    5.  
    6.   if (!$result2)
    7.   {
    8.   echo "<p><strong>Код ошибки:</strong></p>";
    9.   }
    10.  
    11.   if (mysql_num_rows($result2) > 0)
    12.  {
    13.  $arr = array();
    14.   while ($myrow = mysql_fetch_assoc($result2))
    15.   {
    16.  
    17.   $arr[$myrow["komanda"]][$myrow["godtyrnira"]] = $myrow["allsum"];
    18.   }
    19.  
    20.   printf ("
    21.                      <tr>
    22.                        <td width='50'><div align='center'>%s</div></td>
    23.                        <td width='50'><div align='center'>%s</div></td>
    24.                        <td width='50'><div align='center'>%s</div></td>
    25.                        <td width='50'><div align='center'>%s</div></td>
    26.                        </tr>
    27.                    ",$arr["komanda"],$arr["2009"],$arr["2010"],$arr["allsum"]);
    28.  
    29.   }
    30.  
    31.   else
    32.   {
    33.   echo "<p>В таблице нет записей.</p>";
    34.   exit();
    35.   }
    36.  
    37.  
    38.  
    39.    ?>
    Постоянно пустой ответ, чтобы я не делал (( Ужас какой-то. При отладке показывало что есть данные в массиве.
     
  24. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Отлично.
    Данные в массиве есть.

    А структуру массива ты не хочешь глянуть?
    Ведь у тебя нет в нем ключа "komanda"

    Плюс вывод из многомерного массива тоже требует. Ты ведь хочешь получить не 1 строчку, а много?
     
  25. AloKvadro

    AloKvadro Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    24
    Симпатии:
    0
    Извините пожалуйста, я не знаю как сделать ключ в структуре массива :(
    Мне бы хотя бы 1 результат вывести ( Подскажите пожалуйста.