[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подзапрос, возвращающий более 1-го результата
AlmazDelDiablo
Привет всем!

Помогите, пожалуйста, с решением вот какой задачи. Требуется извлечь из базы данных все товары из корзины пользователя. Изначально хотел использовать такой варинант:
$q = $db->arr_query( "SELECT * FROM `products` WHERE `id` = (
SELECT `product_id` FROM `carts` WHERE `cart_id` = '
$cId')"
);
Но как оказалось — такой вариант не работает, как подзапрос возращает более одного результата и запрос фейлится. Запихивать запросы в цикл, как мне здесь говорили, нельзя, из-за слишком большой нагрузки.
Подскажите, может есть на такие случаи какое-то универсальное решение? Мне знаний SQL, помоему, не хватает.



Спустя 41 минута, 6 секунд (18.09.2011 - 14:48) killer8080 написал(а):
попробуй так
SELECT * 
FROM `products`
WHERE `id` IN (
SELECT `product_id` FROM `carts` WHERE `cart_id` = '$cId'
)
или так
SELECT `p`.* 
FROM `products` AS `p`
LEFT JOIN `carts` AS `c` ON `p`.`id`=`c`.`product_id`
WHERE `c`.`cart_id` = '$cId'

Спустя 9 минут, 10 секунд (18.09.2011 - 14:57) AlmazDelDiablo написал(а):
Цитата (killer8080 @ 18.09.2011 - 16:48)
SELECT * 
FROM `products`
WHERE `id` IN (
SELECT `product_id` FROM `carts` WHERE `cart_id` = '$cId'
)

Сделал так — заработало :). Почитал об операторе IN заодно, немного нового открыл для себя.

Спасибо большое!

Спустя 4 часа, 58 минут, 53 секунды (18.09.2011 - 19:56) inpost написал(а):
AlmazDelDiablo
Запрос №1: SELECT `product_id` FROM `carts` WHERE `cart_id` = '$cId'
Получить все ID в массив.
Запрос№2: основной, где WHERE id IN ().

Вот только вчера одному человеку мозги с этим парил smile.gif http://phpforum.ru/index.php?showtopic=50799&st=60&hl=

Спустя 1 час, 14 минут, 10 секунд (18.09.2011 - 21:10) killer8080 написал(а):
inpost
а смысл, когда можно одним запросом сделать тоже самое? wink.gif

Спустя 13 минут, 31 секунда (18.09.2011 - 21:24) inpost написал(а):
killer8080
Подзапросы зло.

Спустя 6 минут, 35 секунд (18.09.2011 - 21:30) killer8080 написал(а):
inpost
делать 2 запроса по сути то же самое, что и подзапрос, только в этой цепочке появляется ещё одно звено - php. Смысл циклом тащить в php данные из мускула, если дальше они в скрипте не нужны? Сомневаюсь что это может улучшить быстродействие.

Спустя 37 минут, 6 секунд (18.09.2011 - 22:07) Evilsoul написал(а):
killer8080
Поддерживаю.
Я много слышу о том что "подзапосы зло" но ни разу на практике в таких словах не нашел истины.

Что такое "подзапрос" и как это работает?! Многие знают одну фразу - "это плохо". Почему?!

Работа проста, сначала выполняется подзапрос, затем запрос с данными из подзапроса.

Вопрос, в чем же зло таится?


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.