|
|
|
| Нужна помощь с запросом.
Есть три таблицы
SS_baskets - поля basketID, productID, count
SS_products - поля productID, name, price
SS_order_products - поля productID, orderID, name, price, count
Как правильно (оптимально) выбрать из первой таблицы записи с определенным basketID и на основе этих записей получить name и price из второй таблицы и вкупе с SS_baskets.count занести в третью таблицу?
Пока что ничего кроме как в лоб, не приходит на ум.
$lastID = mysql_insert_id();
// read basket's data
$basketID = $_COOKIE['lastname'].$pass;
$result = mysql_query("SELECT * FROM `SS_baskets` WHERE basketID = '$basketID'") or die(mysql_error());
while ( $row = mysql_fetch_row($result) ){
$result1 = mysql_query("SELECT name, price FROM `SS_products` WHERE productID = '$row[1]' LIMIT 1") or die(mysql_error());
if ( $prod = mysql_fetch_row($result1) ){
mysql_query("INSERT INTO `SS_order_products` VALUES($row[1], $lastID, '$prod[0]', '$prod[1]', '$row[2]' )") or die(mysql_error());
}
mysql_free_result($result1);
}
|
И ещё вопрос, который не дает покоя :)
Не содержит ли приведенный выше код каких - либо подводных камней, связанных с тем, что имея один активный результат запроса ($result), выполяются на его основе другие запросы и освобождаются их результаты ($result1)? | |
|
|
|
|
|
|
|
для: Хулиган
(28.02.2008 в 01:22)
| | Есть вариант вообще обойти php в подобных задачах
replace into SS_order_products
select
B.productID as productID,
(select max(OP.orderID)+1 from SS_order_products) as orderID,
P.name as name,
P.price as price,
B.count as count
from
SS_baskets as B,
SS_products as P,
SS_order_products as OP
where
B.basketID =' ".$basketID"'
and
P.productID = B.productID
and
OP.productID = B.productID
|
Подводные камни
первое
в начале стоит replace а не insert
то есть если в таблице SS_order_products уже есть такой primary то он перезапешеться
с другой стороны orderID должен быть auto_increment
то есть можно спокойно вместо конструкции
B.productID as productID,
(select max(OP.orderID+1 from SS_order_products)) as orderID,
|
делать просто
или
подставляется только $basketID из php и все
но нужно проверять... | |
|
|
|
|
|
|
|
для: KirillKiev
(29.02.2008 в 14:45)
| | Спасибо, попробую разобраться | |
|
|
|