@taurus90

MySQL JOIN выражение?

Добрый день. В данный момент используется следующее рабочее выражение SQL:

SELECT T.*, I.SUBDIR, I.FILE_NAME, ep.VALUE AS AV 
FROM (SELECT p.ID, p.ACTIVE, p.NAME, p.CODE, p.DETAIL_PICTURE, p.PREVIEW_TEXT, p.PREVIEW_PICTURE, p.DETAIL_TEXT, p.IBLOCK_SECTION_ID, e.PRICE 
FROM b_iblock_element p, b_catalog_price e WHERE e.PRODUCT_ID = p.ID AND p.IBLOCK_ID = 2 and p.ACTIVE = "Y" and e.CATALOG_GROUP_ID = 1) T 
LEFT JOIN b_file I ON T.DETAIL_PICTURE = I.ID 
LEFT JOIN b_iblock_element_property ep ON ep.IBLOCK_ELEMENT_ID = T.ID AND ep.IBLOCK_PROPERTY_ID = 2242 WHERE 1';


К сожалению я слабо понимаю смысл этого выражения, но основы SQL знаю. Что значит "WHERE 1" в конце?

Основной вопрос. Данный запрос возвращает объект с описанием товара в интернет-магазине. В качестве цены (PRICE) запрашивается значение из таблицы b_catalog_price, где нужный ID продукта и столбик CATALOG_GROUP_ID равен 1.

Как мне дополнительно включить в результат значение столбика PRICE для CATALOG_GROUP_ID = 2? Буду признателен за разьяснение....

А еще неплохо бы ссылочку на понятное описание JOIN... Спасибо
  • Вопрос задан
  • 343 просмотра
Решения вопроса 1
@taurus90 Автор вопроса
Удалось решить проблему, добавив следующий параметр в первую строчку к SELECT:

.., e2.PRICE as PRICE_2

И в самом конце, убрав WHERE 1, добавить JOIN:

LEFT JOIN b_catalog_price e2 ON e2.PRODUCT_ID = T.ID AND e2.CATALOG_GROUP_ID = 2


Спасибо кто помог!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@retvizan
Дока или, если на русском - www.cyberforum.ru/mysql/thread782307.html

WHERE 1 это видимо от cms кусок.
Ответ написан
kawabanga
@kawabanga
"where 1" равно "where true", что означает всегда правду, это, вероятно, необходимо для составления следующих параметров фильтрации. Например, у нас есть код, который фильтрует по следующему принципу:
если ( условие) то в блок where добавляем "and выражение от условия". Без where 1 будет ошибка синтаксиса.

По основному вопросу, если вам необходимо добавить два значения, то возможно вот так
"and e.CATALOG_GROUP_ID in (1,2)" или так "and (e.CATALOG_GROUP_ID=1 or e.CATALOG_GROUP_ID=2)"

Где понятнее всего объясняют синтаксис? в справке конечно!
www.mysql.ru/docs/man/JOIN.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы