вывод из базы

Статус
В этой теме нельзя размещать новые ответы.

droit74

Постоялец
Регистрация
20 Сен 2009
Сообщения
55
Реакции
0
задача такая вывести из базы ассортимент суши сеты и роллы(море продукты) их нужно вывеси отсортированном виде (сначало один продукт потом другой и тд)
я пишу :
PHP:
 $result = mysql_query("SELECT id,name,value,description,img_m,product FROM dishes  ",$db);
  $myrow = mysql_fetch_array($result);
    for ($i=1; $i<=3; $i=$i+1){
    switch ($i){
	  case 1: $indif="sushi";
	  case 2: $indfi="set"; 
	  case 3: $indif="roll";
    }
    do
      if ($myrow[product]==$indif){
        printf("
    <table class='tablprod'>
      <tr>
       <td  class='tablprod2'><img src='%s' width='150' height='150'></td>
        <td  align='center'  class='tablprod3'>
		 <table class='tablprod4'>
          <tr>
            <td><h2>%s </h2> </td>
          </tr>
          <tr>
            <td> <h3>%s руб.</h3></td>
          </tr>
          <tr>
            <td>%s</td>
          </tr>
        </table ></td>
      </tr>
    </table>",$myrow["img_m"],$myrow["name"],$myrow["value"],$myrow["description"]);
        }
    while ($myrow = mysql_fetch_array($result));
    }
	?>

в строчке ($myrow[product]==$indif) почимуто не даёт истину а когда пишу ($myrow[product]=="set") выводит нармально
 
а как сделать чтобы он сначала выводил "sushi" потом "roll" и после "set"
 
а как сделать чтобы он сначала выводил "sushi" потом "roll" и после "set"

Первое, что приходит в голову
UPDATE dishes SET product='0_sushi' WHERE product='sushi'
UPDATE dishes SET product='1_roll' WHERE product='roll'
UPDATE dishes SET product='2_set' WHERE product='set'
а потом
SELECT id,name,value,description,img_m,product FROM dishes ORDER BY product ASC
но сначала надо сделать бекап, а то мало ли что такое изменение за собой потянет ;)
ну или мучаться с ассоциативными массивами
 
Первое, что приходит в голову
а потом
но сначала надо сделать бекап, а то мало ли что такое изменение за собой потянет ;)
ну или мучаться с ассоциативными массивами

А при чем тут Update вообще?

Если я правильно понял то группируется запросом, нужно потом всего лишь вывести его. Т.е. даже если построчно выводить массив, то выведет отдельно суши, отдельно роллы и т.д.
 
А при чем тут Update вообще?
Если я правильно понял то группируется запросом, нужно потом всего лишь вывести его. Т.е. даже если построчно выводить массив, то выведет отдельно суши, отдельно роллы и т.д.

UPDATE там к тому, чтобы потом сделать запрос с сортировкой в нужном порядке. Но это плохое решение.
 
а как сделать чтобы он сначала выводил "sushi" потом "roll" и после "set"
один из вариантов построить массив продуктов:
PHP:
	$sql = mysql_query('SELECT id,name,value,description,img_m,product FROM dishes ORDER by name ASC');
	$products = array();
	while( $row = mysql_fetch_array($sql))
	{
		$products[$row['product']][] = array(
			'img_m' => $row['img_m'],
			'name' => $row['name'],
			'value' => $row['value'],
			'description' => $row['description'],
		);
	}
	$position = array('sushi', 'roll', 'set');
	foreach($position as $product)
	{
		if (isset($products[ $product ]))
			foreach ($products[ $product ] as $item)
			{
				printf("
    <table class='tablprod'>
      <tr>
       <td  class='tablprod2'><img src='%s' width='150' height='150'></td>
        <td  align='center'  class='tablprod3'>
         <table class='tablprod4'>
          <tr>
            <td><h2>%s </h2> </td>
          </tr>
          <tr>
            <td> <h3>%s руб.</h3></td>
          </tr>
          <tr>
            <td>%s</td>
          </tr>
        </table ></td>
      </tr>
    </table>", $item['img_m'], $item['name'], $item['value'], $item['description']);
			}
	}
 
1. у тебя несколько ошибок в коде(используй фреймворк он будет тебя поправлять сам:(
PHP:
	  case 1: $indif="sushi";
---->	  case 2: $indfi="set"; // опечатка
	  case 3: $indif="roll";
      if ($myrow[product]==$indif){ // для доступа к элементам всегда используй "" --> $myrow['product'], иначе настанет день когда проблем не огребешь
2. Алгоритм понятен, но его не достаточно, так как по твоей схеме придется 3 раза пройтись по всей таблице в БД, используй встроену. сортировку в SQL
PHP:
 $result = mysql_query("SELECT id,name,value,description,img_m,product FROM dishes ORDER BY product",$db);
  $myrow = mysql_fetch_array($result);
    do {
      printf("
    <table class='tablprod'>
      <tr>
       <td  class='tablprod2'><img src='%s' width='150' height='150'></td>
        <td  align='center'  class='tablprod3'>
		 <table class='tablprod4'>
          <tr>
            <td><h2>%s </h2> </td>
          </tr>
          <tr>
            <td> <h3>%s руб.</h3></td>
          </tr>
          <tr>
            <td>%s</td>
          </tr>
        </table ></td>
      </tr>
    </table>",$myrow["img_m"],$myrow["name"],$myrow["value"],$myrow["description"]);
    } while ($myrow = mysql_fetch_array($result));
	?>
 
А если роллам задать четный id (или любое поле, в котором вручную будет добавляться нужный номер), а сушам не четный и выводить их по id -)
 
Используй код от FlashBlack, только я еще бы изменил его
PHP:
    while( $row = mysql_fetch_array($sql))
    {
        $products[$row['product']][] = array(
            'img_m' => $row['img_m'],
            'name' => $row['name'],
            'value' => $row['value'],
            'description' => $row['description'],
        );
    }
на
PHP:
while( $row = mysql_fetch_array($sql))
{
   $products[$row['product']][] = $row;
}
P.S. в switch не забывай использовать break;
PHP:
    switch ($i){
      case 1: $indif="sushi";
         break;
      case 2: $indfi="set"; 
         break;
      case 3: $indif="roll";
         break;
    }
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху