У меня очень большой оператор MySQL, зацикливаемый через php foreach, и каждый цикл, связанный с предыдущим, объединяет все. Я упрощу это заявление в ядре своей проблемы, при необходимости я, конечно, могу добавить дополнительные сведения позже по запросу.SQL IF ELSE/CASE предложение в условии WHERE
У меня есть эта таблица
+--------+-----------+-----------+
| ID | LANG | TITLE |
+--------+-----------+-----------+
| 1 | EN | T-A |
+--------+-----------+-----------+
| 1 | FR | T-A |
+--------+-----------+-----------+
| 2 | FR | T-B |
+--------+-----------+-----------+
| 3 | DE | T-C |
+--------+-----------+-----------+
| 3 | EN | T-C |
+--------+-----------+-----------+
Я хочу написать WHERE условие в SQL SELECT, который должен показать мне для каждого ID максимум один результат. Но он должен показывать результаты , только если LANG - FR или EN. Наверх FR следует предпочесть и EN должны отображаться только в качестве альтернативы, если для идентификатора нет FR. Таким образом, результат будет выглядеть следующим образом.
+--------+-----------+-----------+
| ID | LANG | TITLE |
+--------+-----------+-----------+
| 1 | FR | T-A |
+--------+-----------+-----------+
| 2 | FR | T-B |
+--------+-----------+-----------+
| 3 | EN | T-C |
+--------+-----------+-----------+
Я пытался создать что-то самостоятельно с IF - ELSE/CASE, но я не очень опытный с SQL, так что любая помощь будет намного appreaciated.
Упрощенный SQL Я пытался бы что-то вроде
SELECT * FROM `table`
WHERE `table`.`ID` = 1
IF `table`.`LANG` = 'FR'
BEGIN
AND `table`.`LANG` = 'FR'
END
ELSE
BEGIN
AND `table`.`LANG` = 'EN'
END
union all
SELECT * FROM `table`
WHERE `table`.`ID` = 2
IF `table`.`LANG` = 'FR'
BEGIN
AND `table`.`LANG` = 'FR'
END
ELSE
BEGIN
AND `table`.`LANG` = 'EN'
END
union all
SELECT * FROM `table`
WHERE `table`.`ID` = 3
IF `table`.`LANG` = 'FR'
BEGIN
AND `table`.`LANG` = 'FR'
END
ELSE
BEGIN
AND `table`.`LANG` = 'EN'
END
Sitenote Я не могу использовать любую конструкцию с ORDER BY в сочетании с LIMIT 1, так как я зацикливание на SQL через PHP для каждого цикла несколько раз.
EDIT: решение, которое работает для меня
SELECT * FROM `table1`
WHERE ID = 1
AND lang = 'FR'
OR (lang = 'EN' AND ID NOT IN (SELECT ID FROM table1 WHERE lang = 'FR'))
Интересно, это какой-то учебник или курс онлайн? В прошлом я видел поразительно похожие вопросы. –