Вывод товаров по цветам

peretc001

Новичок
Добрый день.

В базе есть две таблицы product (id, name, price, col, ...), где хранятся товары и color (id, iid, cvet), где хранятся цвета.

Есть, условно, 3 группы товаров: 1-ая имеет четыре цвета, 2-ая группа - два других цвета, 3-я - три других цвета. Т.е. цвета не совпадают. При этом, по умолчанию должны выводится разные цвета у каждого товара, соответствующие картинке.

Я пытаюсь вывести так:
PHP:
<?php $cyt14 = mysql_query("SELECT * FROM product, color WHERE product.col = color.iid group by color.cvet, product.id ");
while( $row = mysql_fetch_array($cyt14) )
{ ?>
							<tr>
								<td width="40%">
									<a class="img" href="img/<?php echo $row[imgbig]; ?>"><img src="img/<?php echo $row[img]; ?>" style="padding:20px;background:#fff;border:1px dashed #ccc;"></a>
								</td>
								<td width="60%">
									<h1><a class="name" href="/<?php echo $row[art]; ?>.php"><?php echo $row[name]; ?> <?php echo $row[model]; ?></a></h1>
									<p><?php echo $row[desc]; ?></p>
									<form action="inc/add.php?id=<?php echo $row[id]; ?>&session_id=<?php echo session_id(); ?>" method="post" name="add">
									<p align="left">Цвет:
									<select name="color">
										<option value="<?php echo $row[cvet]; ?>"><?php echo $row[cvet]; ?></option>
									</select>
									Цена: <b><?php echo $row[price]; ?></b>
									<p>Кол-во: <input type="text" class="qty" name="qty" value="1"> <input type="submit" class="cart" name="add" value="Купить"></p>
									</form>
								</td>
							</tr>
						<?php } ?>
Выводит три товара с цветом №1, потом опять те же три товара с цветом № 2 и т.д.

Помогите, пожалуйста, не могу сообразить как сделать.
 

peretc001

Новичок
Должно выводится так:

Товар 1
<select name="color">
<option value="СИНИЙ">СИНИЙ</option>
<option value="РОЗОВЫЙ">РОЗОВЫЙ</option>
<option value="СЕРЫЙ">СЕРЫЙ</option>
<option value="ЗЕЛЕНЫЙ">ЗЕЛЕНЫЙ</option>
</select>

Товар 2
<select name="color">
<option value="СЕРЫЙ">СЕРЫЙ</option>
<option value="СИНИЙ">СИНИЙ</option>
<option value="РОЗОВЫЙ">РОЗОВЫЙ</option>
<option value="ЗЕЛЕНЫЙ">ЗЕЛЕНЫЙ</option>
</select>

Товар 3
<select name="color">
<option value="ЗЕЛЕНЫЙ">ЗЕЛЕНЫЙ</option>
<option value="СИНИЙ">СИНИЙ</option>
<option value="РОЗОВЫЙ">РОЗОВЫЙ</option>
<option value="СЕРЫЙ">СЕРЫЙ</option>
</select>
 

peretc001

Новичок
Нашел вариант:
В базе product создаем вместо одного товара - четыре (син, сер, роз, зел) с одни и тем же id.
Выводим:
PHP:
<?php $cyt14 = mysql_query("SELECT * FROM product group by id order by id ");
						while( $row = mysql_fetch_array($cyt14) )
							{ ?>
							<tr>
								<td width="40%">
									<a class="img" href="img/<?php echo $row[imgbig]; ?>"><img src="img/<?php echo $row[img]; ?>" style="padding:20px;background:#fff;border:1px dashed #ccc;"></a>
								</td>
								<td width="60%">
									<h1><a class="name" href="/<?php echo $row[art]; ?>.php"><?php echo $row[name]; ?> <?php echo $row[model]; ?></a></h1>
									<p><?php echo $row[desc]; ?></p>
									<form action="inc/add.php?id=<?php echo $row[id]; ?>&session_id=<?php echo session_id(); ?>" method="post" name="add">
									<p align="left">Цвет:
									<select name="color">
									<?php $col4 = mysql_query("SELECT * FROM product WHERE group by col ");
						while( $row = mysql_fetch_array($col4) )
							{ ?>
							
										<option value="<?php echo $row[col]; ?>"><?php echo $row[col]; ?></option>
									
									<?php } ?>
									</select>
									Цена: <b><?php echo $row[price]; ?></b>
									<p>Кол-во: <input type="text" class="qty" name="qty" value="1"> <input type="submit" class="cart" name="add" value="Купить"></p>
									</form>
								</td>
							</tr>
						<?php } ?>
Но тогда у всех товаров одинаковый выбор цветов:
Синий,
Серый,
Розовый,
Зеленый
А как сделать чтоб цвета соответствовали картинке (примерно как во втором посте)?
 

WMix

герр M:)ller
Партнер клуба
а давай сконцентрируемся на чемто одном, html php или mysql

голова ходуном от твоих имен полей в таблице, переменных в пхп и этого мусора который называешь кодом

эта связка я так понимаю
PHP:
select * 
from product p
left join color c on p.col = c.iid
where ...
собираем данные.. никаких group by..

остатки делай на пхп
 

peretc001

Новичок
Выводит один и тот же товар 4 раза, с разными цветами. А как их объединит в один товар?
 

WMix

герр M:)ller
Партнер клуба
идешь по всем строкам и собираешь исходяший масив
PHP:
while( $row = mysql_fetch_array($cyt14) ){
    // некрасиво получилось, нужно писать 2 запроса, но чтоб осознать что да как...
    $products[$row['product_id']] = $row; 
    // добавим цвета
    $product_colors[ $row['product_id'] ] = $row['color']
}
print_r($products);
print_r($product_colors);
 

peretc001

Новичок
PHP:
<? $cyt14 = mysql_query("select * from product p left join color c on p.col = c.cvet WHERE art=14 order by p.id asc ");
						while( $row = mysql_fetch_array($cyt14) )
							{ 
							$products[$row['product.id']] = $row; 
							// добавим цвета
							$product_colors[ $row['product.id'] ] = $row['color'];
							?>
<tr>
<td width="40%">
.....
</td>
</tr>
<?php }
							print_r($products);
							print_r($product_colors);
?>
Выдает что-то непонятное:

Array ( [] => Array ( [0] => 3 [id] => 4 [1] => 14 [art] => 14 [2] => Набор трансформируемой мебели "ДЭМИ" [name] => Набор трансформируемой мебели "ДЭМИ" [3] => СУТ 14-02 [model] => СУТ 14-02 [4] => Растущая парта 750х550 + полка сзади 750х250 + полка сбоку 800х250 + стул ортопедический [desc] => Растущая парта 750х550 + полка сзади 750х250 + полка сбоку 800х250 + стул ортопедический [5] => 8800 [price] => 8800 [6] => cyt [col] => cyt [7] => 14-02.png => 14-02.png [8] => 14-02big.png [imgbig] => 14-02big.png [9] => 4 [10] => cyt [iid] => cyt [11] => Ябл/серый [cvet] => Ябл/серый ) ) Array ( [] => )[/QUOTE]

Я не могу понять как с этим работать. Подскажите, куда дальше копать
 

WMix

герр M:)ller
Партнер клуба
ты не знаешь что такое print_r?
первый показывает весь масив продуктов с ключем продукта, второй все цвета продукта с ключем id продукта...
print_r пишут обычно чтоб увидеть что спрятано в переменной, их после нужно конечноже убрать!

ЗЫ $row['product.id'] не правильно просто $row['id']
 

peretc001

Новичок
а как теперь сделать чтоб выводился один товар, а цвета были спрятаны в
PHP:
<select name="color">
<option value=""><?php echo $product_colors; ?></option>
</select>
 

WMix

герр M:)ller
Партнер клуба
не понимаю вопрос,...
что есть, что нужно?...
 

peretc001

Новичок
покажу весь код:
PHP:
$cyt14 = mysql_query("select * from product p left join color c on p.col = c.iid WHERE p.art = '$id' order by p.id");
						while( $row = mysql_fetch_array($cyt14) )
							{ 
							?>
							<tr>
								<td width="40%">
									<a class="img" href="img/<?php echo $row[imgbig]; ?>"><img src="img/<?php echo $row[img]; ?>" style="padding:20px;background:#fff;border:1px dashed #ccc;"></a>
								</td>
								<td width="60%">
									<h1><a class="name" href="/shop/product.php?id=<?php echo $row[id]; ?>"><?php echo $row[name]; ?> <?php echo $row[model]; ?></a></h1>
									<p><?php echo $row[desc]; ?></p>
									<form action="inc/add.php?id=<?php echo $row[id]; ?>&session_id=<?php echo session_id(); ?>" method="post" name="add">
									<p align="left">Цвет:
									<select name="color">
										<option value="Клен/Серый"><?php echo $row[cvet]; ?></option>
									</select>
									
							
									Цена: <b><?php echo $row[price]; ?> <small>РУБ.</small></b>
							
									<p>Кол-во: <input type="text" class="qty" name="qty" value="1"> <input type="submit" class="addtocart" name="add" value="&nbsp;"></p>
									</form>
								</td>
							</tr>
					<? }
Товар выводится так:
Товар1 - цвет1
Товар1 - цвет2
Товар1 - цвет 3
Товар1 - цвет4

Товар2-цвет1
Товар2-цвет2
Товар2-цвет3
Товар4-цвет4

и т.д.

А нужно
Товар1 - цвет:
<select name="color">
<option value="">цвет1</option>
<option value="">цвет2</option>
<option value="">цвет3</option>
<option value="">цвет4</option>
</select>

Товар2 - цвет:
<select name="color">
<option value="">цвет1</option>
<option value="">цвет2</option>
<option value="">цвет3</option>
<option value="">цвет4</option>
</select>

и т.д.
 

WMix

герр M:)ller
Партнер клуба
у меня чувство, что мы вначале вопроса....
 

archcoffe

Новичок
мне не нравиться что идентификатор объекта принадлежит таблице цветов, зачем он там нужен если это вспомогательная таблица!?
нужно выбрать все записи где идентификатор цвета соответствует идентификатору цвета в родительской таблице.
основная таблица `t` (id, c_id, title)
таблица цветов `c` (id, color)
PHP:
SELECT t.id,t.title,c.color FROM t1 LEFT JOIN c ON c.id = t.c_id
для наглядности
PHP:
SELECT t.id,t.title,(SELECT color FROM c WHERE id=t.c_id) as color FROM t
в остальном http://phpfaq.ru/debug
 
Сверху