@oo22maxi

Как получить одну запись с приоритетом из БД?

Есть две таблицы, в первой заказы и доп. информация, во второй находится тайтл и текст в разных переводах

tasks
id | user_id
------------------
1  |  1
2  |  1


tasks_translate
id | task_id |  lang  |  title
--------------------------------
1  |    1    |   ru   | текст
2  |    1    |   en   | text
1  |    2    |   en   | text


Записи с одним переводом получаю примерно таким запросом
SELECT 
    tasks.*, 
    t2.lang, 
    t2.title 
FROM 
    tasks 
LEFT JOIN 
    tasks_translates AS t2 
ON 
    (tasks.id = t2.task_id) 
WHERE
    t2.lang = ru


А вот как получить все записи без повторения, при этом, если у заказа нет ru перевода, взять с en переводом? Если без условия (WHERE) то получу повторение:
id | user_id | lang | title
--------------------------------
 1 |    1    |  ru  | текст
 1 |    1    |  en  | text
 2 |    1    |  en  | text
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
@oo22maxi Автор вопроса
Решил как то так
SELECT 
    tasks.*, 
    t2.lang, 
    t2.title 
FROM 
    tasks 
JOIN 
    tasks_translates AS t2 
ON 
    (tasks.id = t2.task_id) 
WHERE 
    t2.lang = (
        SELECT 
            lang 
        FROM 
            tasks_translates
        WHERE 
            task_id = tasks.id 
        ORDER BY FIELD 
            (lang, 'en', 'ru') 
        LIMIT 1 
    )


Если есть лучше способ, скажите какой...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы