Возможно ли создать запрос? - MySQL
Формулировка задачи:
Здравствуйте!
Есть таблица продуктов - table1, таблица тэгов - table2 и таблица table3, записи которых состоят из ID записи, ID продукта и ID тэга.
Таким образом, конкретному продукту присваиваю тэги. Если продукту с ID N1 нужно присвоить теги с ID N2 и N3, то в
table3 нужно записать 2 записи -
ID, N1, N2
ID, N1, N3
У меня 2 вопроса.
1. правильно ли таким образом создавать связи между таблицами?
2. возможно ли создать запрос, который выведет все записи с таблицы тэгов и еще одно поле, которое =1, если в таблице table3 есть запись с ID данного продукта и ID данного тэга, или =0, если такой записи не найдено.
Решение задачи: «Возможно ли создать запрос?»
textual
Листинг программы
SELECT t2.id , t2.tag_name , SUM(CASE WHEN t3.id IS NOT NULL THEN 1 ELSE 0 END) tag_found FROM table2 t2 LEFT JOIN table3 t3 ON (t3.id_tag = t2.id AND t3.id_prod = :PROD_ID)
Объяснение кода листинга программы
- В данном коде выполняется запрос на выборку данных из таблицы
table2и её внешнего объединения с таблицейtable3по полямid_tagиid_prodс использованием оператораLEFT JOIN. - В итоговой выборке присутствуют два поля:
t2.idиt2.tag_name, которые соответствуют идентификатору и названию тега из таблицыtable2. - Также в итоговой выборке присутствует третье поле
tag_found, которое вычисляется с использованием функцииSUMи оператораCASE. Если значение поляt3.idне равноNULL, то в полеtag_foundзаписывается1, иначе0. Это поле отображает количество найденных тегов для каждого запися в таблицеtable2. - В строке
FROM table2 t2указывается, что выборка данных будет производиться из таблицыtable2. - В строке
LEFT JOIN table3 t3 ON (t3.id_tag = t2.id AND t3.id_prod = :PROD_ID)производится объединение таблицtable2иtable3по полямid_tagиid_prodс использованием оператораON. Также здесь указывается условие объединения, что запись из таблицыtable3будет выбираться только в том случае, если её идентификатор равен идентификатору продукта, указанному в переменной:PROD_ID.