За последние 24 часа нас посетили 16104 программиста и 1666 роботов. Сейчас ищет 871 программист ...

Проблема с группировкой данных

Тема в разделе "PHP для новичков", создана пользователем Serghter, 2 окт 2014.

  1. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Здравствуйте,не могли бы подсказать,у меня есть БД,и есть таблица,со следующим содержанием:

    Как сделать,чтобы выводился сгруппированный запрос,и в результате на странице получилось вот так?

    Очень буду благодарен за подсказку.
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Код (Text):
    1. $res=mysqli_query('select vendor, item from table1');
    2. while ($row = mysqli_fetch_assoc($res)) {
    3.    $out[$row['vendor']][] = $row['item'];
    4. }
    5. foreach ($out as $key => &$arr)
    6.    $arr = implode(', ', $arr);
     
  3. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Хм,интересно,сейчас проверим)
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Код (Text):
    1. SELECT t.vendor, GROUP_CONCAT(DISTINCT t.item ORDER BY t.item DESC SEPARATOR ', ') AS items FROM `table1` t GROUP BY t.vendor;
     
  5. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Добавлено спустя 2 минуты 49 секунд:
    Содержимое кода:

    Код (Text):
    1. <?php  
    2.  
    3. // данные доступа к базе данных
    4.  
    5. ................................................
    6.  
    7.  
    8.  //Соединяемся с базой данных.
    9.  $link = mysql_connect($mysql_host, $mysql_user, $mysql_password)
    10.  or die("Could not connect : " . mysql_error());
    11. //mysql_query("SET NAMES 'utf8';");
    12. mysql_query("SET NAMES 'cp1251';");
    13. //mysql_query("SET NAMES 'utf8';");
    14.  mysql_select_db($my_database) or die("Could not select database");  
    15.  
    16. $res=mysql_query('select nazvanie, id_fio from plat');
    17. while ($row = mysql_query_fetch_assoc($res)) {
    18.    $out[$row['nazvanie']][] = $row['id_fio'];
    19. }
    20. foreach ($out as $key => &$arr)
    21.    $arr = implode(', ', $arr);
    22.  
    23.  
    24. //implode(',', $plats)."-".implode(',', $nazv)."-".implode(',', $names);
    25.  
    26.  
    27.  //Запускаем команду
    28.  $result = mysql_query($query) or die("Query failed : " . mysql_error());  
    29. mysql_close($link);
    30. ?>
     
  6. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    И что вам не понятно из этих ошибок?
     
  7. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Запрос в phpmyadmin работает отлично,но как через скрипт php отобразить результат через echo?
     
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    прочитать документацию по функции mysql_query() чтобы понять почему сервер возвращает ошибку вместо совершения запроса.
     
  9. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    нет нет,с совершением вашего sql запроса ошибки php не выдает,просто пустая страница,как теперь вывести результат в echo?
     
  10. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    не хочет выводить правильно((

    Код (Text):
    1. $query="SELECT t.nazvanie, GROUP_CONCAT(DISTINCT t.id_fio ORDER BY t.id_fio DESC SEPARATOR ', ') AS items FROM `plat` t GROUP BY t.nazvanie";
    2. $result = mysql_query($query);
    3.  
    4. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    5.     printf("ID: %s  Имя: %s", $row["nazvanie"], $row["id_fio"]);
    6. }
    В итоге такое получилось:

    А должно быть хотя бы так:

     
  11. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Сделайте вывод var_dump($row); в теле цикла чтобы понять как выглядят данные в этом массиве, если это вам не понятно из результата выполнения запроса в phpmyadmin, если конечно запрос из php у вас выполняется.

    Добавлено спустя 50 секунд:
    printf("ID: %s Имя: %s", $row["nazvanie"], $row["id_fio"]);

    Также внимательно посмотрите на сам запрос, если не наступило прозрение.
     
  12. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    да,я вижу что в списке массива то что надо появилось.

    Добавлено спустя 13 минут 55 секунд:
    попробовал дописать,но результат не тот((

    Код (Text):
    1. $query="SELECT t.nazvanie, GROUP_CONCAT(DISTINCT t.id_fio ORDER BY t.id_fio DESC SEPARATOR ', ') AS items FROM `plat` t GROUP BY t.nazvanie";
    2. $result = mysql_query($query);
    3.  
    4. $names = array();
    5. $nazv = array();
    6.  
    7. while ($reslevel = mysql_fetch_array($result, MYSQL_ASSOC)) {
    8.     $names[] = $reslevel['nazvanie'];
    9.     $nazv[] = $reslevel['id_fio'];
    10. }
    11.  
    12.  
    13. $length = count($names);
    14.  
    15. for ($i=0;$i<$length;$i++){
    16. echo '<pre>';
    17.  echo $names[$i]."".$nazv[$i];
    18. echo  '</pre>';
    19. }
     
  13. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
     
  14. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    эх,не понять мне это ну ладно уж извените что побеспокоил,можно закрывать тему.(
     
  15. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Бросайте заниматься программированием или не отступайте и включайте голову.


    Код (PHP):
    1. while ($reslevel = mysql_fetch_array($result, MYSQL_ASSOC)) {
    2.      // если нужны итемы по отдельности, делаем для $reslevel['items'] explode() по маркеру ', '
    3.     print $reslevel['nazvanie'] . ':' . $reslevel['items'];
    4.  
    5. }
     
  16. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    благодарю,ну я почти правильно сделал,а если честно,в настоящий момент, болит голова.