Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: формирование вывода запроса
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » формирование вывода запроса

Страниц (1): [1]
 

1. alfred - 04 Мая, 2007 - 16:33:36 - перейти к сообщению
есть цикл, в котором выводятся товары из бд определенной категории все сразу(напрмер , телевизоры), группируя их по названию фирмы.
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $r=mysql_query("select * from acc_pro ORDER BY acc_pro.firm ");
  3. while($a=mysql_fetch_row($r)){
  4. echo"<tr>
  5.  

и т.д.
как можно вывести в том же цикле только один раз назчание фирмы группы товаров? -
например
фирма
товар1
товар2
фирма2
тов....
фирма3
2. valenok - 04 Мая, 2007 - 16:56:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $r = mysql_query("SELECT * FROM `tbl` WHERE `tovar`='television' ORDER BY `manufacter` ");
  5.  
  6. $current_manufacter='';
  7.  
  8. while($row = mysql_fetch_assoc($r)){
  9.  if(empty($current_manufacter) OR $current_manufacter != $row['manufacter']) {
  10.   $current_manufacter = $row['manufacter'];
  11.   echo $current_manufacter;
  12.  }
  13.  
  14. echo $row['tovar'];
  15. }
  16. ?>
  17.  
  18.  
3. evgenijj - 04 Мая, 2007 - 16:56:31 - перейти к сообщению
Мало информации. Нет структуры БД. Один из вариантов: сначала выбираем производителей товаров определенной категории:
SELECT DISTINCT maker FROM products WHERE type='TV' ORDER BY maker;
Потом в цикле перебираем всех производителей, для каждого из них получая список производимых товаров определенной категории:
SELECT id_product, title, description FROM products WHERE type='TV' AND maker='current_maker';
Получается два вложенных цикла.
4. alfred - 04 Мая, 2007 - 17:01:36 - перейти к сообщению
есть таблица телевизоров. их много. для каждого есть запись firm (LG, ....)и т.д.
я сделала похожий варинт, что дал valenok, но в моем случае он работает так%

в начале выводит все фимы, а потом все товары.
можно подробнее про "Потом в цикле перебираем всех производителей, для каждого из них получая список производимых товаров"
немного непонятно...) как перебираем? чем? как получить список?

PS отбой. проблема была в разметке страницы...)
5. evgenijj - 04 Мая, 2007 - 17:13:53 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $q1 = "SELECT DISTINCT maker FROM products WHERE type='TV' ORDER BY maker";
  3. $r1 = mysql_query( $q1 );
  4. echo "<ul>";
  5. while( $maker = mysql_fetch_array( $r1 ) )
  6. {
  7.     echo "<li>";
  8.     echo $maker["maker"];
  9.     $q2 = "SELECT id_prd, title, description FROM products WHERE type='TV' AND maker='".$maker["maker"]."'";
  10.     $r2 = mysql_query( $q2 );
  11.     echo "<ul>";
  12.     while ( $prd = mysql_fetch_array( $r2 )
  13.     {
  14.          echo "<li>".$prd["title"]."<li>";
  15.     }
  16.     echo "</ul>";
  17.    echo "</li>";
  18. }
  19. echo "</ul>";
  20.  
6. valenok - 04 Мая, 2007 - 17:23:29 - перейти к сообщению
Вариант с условием :
0.000649929046630859385 секунд

Вариант с двумя циклами:
0.00146412849426269531 секунд
7. evgenijj - 04 Мая, 2007 - 17:25:56 - перейти к сообщению
valenok пишет:
Вариант с условием :
0.000649929046630859385 секунд

Вариант с двумя циклами:
0.00146412849426269531 секунд

Да, согласен. Я бы тоже обошелся одним запросом к БД, а все остальное сделал бы средствами PHP.
8. alfred - 04 Мая, 2007 - 17:27:02 - перейти к сообщению
valenok пишет:
Вариант с условием :
0.000649929046630859385 секунд

Вариант с двумя циклами:
0.00146412849426269531 секунд

Радость
я домучала вариант с условием...я просто запуталась в tr td )))

 

Powered by ExBB FM 1.0 RC1