Forum Webscript.Ru

Программирование => PHP => Тема начата: Vad от 12 Июня 2003, 22:13:58

Название: объединение нескольких товаров в таблицу
Отправлено: Vad от 12 Июня 2003, 22:13:58
Помогите уже замучался
нужно объединить все товары определенной категории в сравнительную таблицу типа

характеристика 1    |   продукт 1    |    продукт 2 и т.д.
характеристика 2    |   продукт 1    |    продукт 2 и т.д.

Кол-во товаров заранее не известно

структура базы:

products
prod_id         |       prod_name       |      prod_category

properties - свойства товаров
prop_id         |       prop_name

prod_values - значение свойств
product        |        property            |      value

Заранее огромное спасибо

Примерно должно получиться так http://stibetherm.gr/english/products/solar_systems_1.html
Название: объединение нескольких товаров в таблицу
Отправлено: Neter от 12 Июня 2003, 22:56:35
Так делай, раз надо.. В чём проблема? Что именно ты не можешь сделать? Или ты хочешь чтобы над твоей работой другие думали?

[off]Надо открывать отдельный форум по логике...[/off]
Название: объединение нескольких товаров в таблицу
Отправлено: FreeSpace от 12 Июня 2003, 23:00:49
Vad
Neter прав, ничего архисложного нету.
Сядь, подумай, набросай на бумаге приблизительный план, если в уме сложно. Ну а потом начинай реализовывать.
Подсказка: характеристики одного товара выводить, надеюсь, получается?
Ну тогда что мешает вывести одновременно характеристики двух?
Название: объединение нескольких товаров в таблицу
Отправлено: Макс от 12 Июня 2003, 23:15:02
примерно такой запрос сделай
SELECT
  prop.prop_name,
  pv.value
FROM
  properties prop,
  prod_values pv,
  products prod
WHERE
  prod.prod_id = pv.product AND
  prop.prop_id = pv.properties AND
  prod.prod_category = 123456
ORDER BY prop.prop_id, prod.prod_id

вывод надеюсь сам напишешь ? (если этот запрос верный)
Название: объединение нескольких товаров в таблицу
Отправлено: Vad от 13 Июня 2003, 20:42:19
проблема была в том что название характеристики товара выводится не один раз а столько сколько товара а как от этого избавится я не знал
сейчас попробую этот запрос может дело в ORDER BY
Название: объединение нескольких товаров в таблицу
Отправлено: Vad от 13 Июня 2003, 21:38:20
Непомогло
Подскажите как сделать чтобы название характеристики выводилось только один раз
Вот мой код

                     $sql="
                     SELECT prop_name,value
                        FROM properties,prod_values,products
                        WHERE
                             prod_id = product AND
                             prop_id = property AND
                             prod_cat_id = 1
                        ORDER BY prop_id, prod_id
                     ";
                     $result = mysql_query ($sql);
                     while($row = mysql_fetch_array($result) )
                     {
                             $prop_name = $row[\'prop_name\'];
                             $values = $row[\'value\'];
                          echo "".$prop_name."".$values."";
                     }

выводит
цвет        белый
цвет        черный

а надо
цвет         черный          белый

блин чувствую что задача не сложной но никак не вдуплю. помогите
Название: объединение нескольких товаров в таблицу
Отправлено: Neter от 13 Июня 2003, 23:07:20
Да уж :)
Самый элементарный способ через temp-переменную..

$sql="SELECT prop_name,value
FROM properties,prod_values,products
WHERE
prod_id = product AND
prop_id = property AND
prod_cat_id = 1
ORDER BY prop_id, prod_id";

$result = mysql_query ($sql);
$temp = "";
while($row = mysql_fetch_array($result) )
{
$prop_name = ($temp != $row[\'prop_name\']) ? $temp=$row[\'prop_name\'] : "";
$prop_name = $row[\'prop_name\'];
$values = $row[\'value\'];
echo "".$prop_name."".$values."";
}
Название: объединение нескольких товаров в таблицу
Отправлено: Макс от 13 Июня 2003, 23:11:26
Vad
прояви немножко программистской фантазии :

$result = mysql_query ($sql);
$last_char = \'\';
echo "";
while($row = mysql_fetch_array($result) )
{
   $prop_name = $row[\'prop_name\'];
   $values = $row[\'value\'];
   if ($last_char != $prop_name) {
      if (empty($last_char)) {
        echo "";
      } else {
        echo "";
      }
      $last_char = $prop_name;
      echo "";
   }
   echo "";
}
echo "
".$prop_name."".$values."
";

примерно так. Код я конечно же не проверял =)
Название: объединение нескольких товаров в таблицу
Отправлено: Neter от 13 Июня 2003, 23:21:31
Да, и ещё. ORDER BY - это сортировка результатов. Если она тебе нужна то лучше явно указать ASC (возрастание) или DESC (убывание)

Пример:
ORDER BY id, name ASC
Название: объединение нескольких товаров в таблицу
Отправлено: Макс от 13 Июня 2003, 23:29:46
Neter
в данном запросе сортировка нужна чтобы вывести записи в удобном для вывода порядке:
------------------------------------------
характеристика 1 | продукт 1
характеристика 1 | продукт 2
характеристика 1 | продукт 3
------------------------------------------
характеристика 2 | продукт 1
характеристика 2 | продукт 2
характеристика 2 | продукт 3
------------------------------------------
характеристика 3 | продукт 1
характеристика 3 | продукт 2
характеристика 3 | продукт 3

В этом случае удобнее выводить таблицу в виде
------------------------------------------
характеристика 1 | продукт 1 | продукт 2 | продукт 3
характеристика 2 | продукт 1 | продукт 2 | продукт 3
характеристика 3 | продукт 1 | продукт 2 | продукт 3
Название: объединение нескольких товаров в таблицу
Отправлено: Neter от 14 Июня 2003, 00:15:44
Макс Я просто обьяснил зачем используется ORDER BY чтобы подобных вопросов больше не возникало.
Цитировать
Vad:
проблема была в том что название характеристики товара выводится не один раз а столько сколько товара а как от этого избавится я не знал
сейчас попробую этот запрос может дело в ORDER BY