2016-06-06 2 views
1

У меня есть веб-сайт, на котором перечислены различные продукты на странице, используя разбиение на страницы Laravel. Продукты на этой странице должны быть заказаны по их названию, однако здесь проблема.Запросить запрос по специальному отношению и paginate

Структура моей базы данных выглядит следующим образом:

+----------+ +--------------+ 
| Products | | Translations | 
+----------+ +--------------+ 
| Id  | | product_id | 
| ...  | | slug   | 
+----------+ | locale  | 
       | value  | 
       +--------------+ 

Название каждого продукта доступна в translations таблице, где slug='name'. Однако не каждый продукт имеет перевод в каждом доступном locale.
Название продукта должно быть переводом в данном регионе. Если это не доступно, используется английское имя. Если это не доступно, используется первый доступный перевод.

Как это можно сделать в красноречивой или MySQL? Я искал решения, но не смог найти тот, который сделал именно это.

+0

Где хранятся английским название? или другие имена, если на то пошло? – sagi

+0

Все имена хранятся в таблице переводов с помощью 'product_id',' slug' и 'locale', чтобы найти правильные переводы. – Jerodev

ответ

1

Вы должны попытаться использовать функцию COALESCE, которая возвращает первое ненулевое значение, например, как:

SELECT COALESCE(<sub-query by locale>, 
    <sub-query to bring english name>, 
    <sub-query to bring any other value you want>) FROM product; 
+0

Спасибо, это действительно устранило мою проблему. :) – Jerodev

Смежные вопросы