[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разьясните запрос пожайлуста
Nuzhser
Здравствуйте, имею в файле запрос но не до конца его понимаю, меня интересует роль блоков SELECT через запятую

("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, 
(SELECT price FROM "
. DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount,
(SELECT price FROM "
. DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special,
(SELECT points FROM "
. DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status,
(SELECT wcd.unit FROM "
. DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class,
(SELECT lcd.unit FROM "
. DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class,
(SELECT AVG(rating) AS total FROM "
. DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating,
(SELECT COUNT(*) AS total FROM "
. DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews

FROM "
. DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'")




Спустя 9 минут, 19 секунд (29.08.2012 - 19:55) Игорь_Vasinsky написал(а):
вложенные запросы. т.е. можно не тока выборку сделать из таблицы - но и из другой выборки. а чтоб не городить много букв - каждой выборке назначается алияс (псевдоним) - через AS

Спустя 29 минут, 56 секунд (29.08.2012 - 20:25) Nuzhser написал(а):
Ну вот есть первый блок как AS discount
а после FROM то есть как бы должно оно быть что мы из него выбираем а его нету или я неправильно рассуждаю

Спустя 18 минут, 51 секунда (29.08.2012 - 20:44) Игорь_Vasinsky написал(а):
правильно)

Спустя 50 секунд (29.08.2012 - 20:45) Игорь_Vasinsky написал(а):
стой.

когда запрос идёт через запятую - это он вставляется как ячейка в перечисление ячеек

Спустя 13 минут, 4 секунды (29.08.2012 - 20:58) Nuzhser написал(а):
То есть ему и не надо указывать откуда просто как ячейка и само собой понятно откуда она взялась, ага типа она будет в результате выборки называться discount кажеться я понял

Другими словами внизу запроса идет обьединение таблиц но эти блоки SELECT из обьединение ничего брать не будут они выбирают из своих таблиц и все

Спустя 2 минуты, 42 секунды (29.08.2012 - 21:01) Игорь_Vasinsky написал(а):
да.

но я сам не очень такие запросы практикую.

вообщем ИМХО

Спустя 1 минута, 28 секунд (29.08.2012 - 21:02) Nuzhser написал(а):
Ну да но понять то надо людей ведь к тому же оно и работает)

Спустя 2 минуты, 17 секунд (29.08.2012 - 21:04) Игорь_Vasinsky написал(а):
ну вот чёт ни кто из sqlщиков не заглядывает

Спустя 51 секунда (29.08.2012 - 21:05) Nuzhser написал(а):
Кароче спасибо иду смотреть футбол

Спустя 1 минута, 46 секунд (29.08.2012 - 21:07) Игорь_Vasinsky написал(а):
biggrin.gif

Спустя 5 минут (29.08.2012 - 21:12) Invis1ble написал(а):
Все правильно. Выполняются подзапросы и в результирующей выборке эти значения фигурируют под именами алиасов (псевдонимов).


_____________
Лэт ит би
Быстрый ответ:

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