Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.03.2016 23:47:41

Max_G
Откуда: Одесса, Украина
Сообщений: 55

MySQL

Есть таблица продуктов, есть таблица параметров, есть таблица продукт_параметр.
Херня получается у меня, когда я хочу отобрать продукты, совпадающие с тремя параметрами сразу.
Скажем, синий и детский и спортивный

Как такое решается?

Есть мысль сделать с помощью

select count(products.id) as count...
join ... join ...
where (parameters.id = 1 or parameters.id = 2 or parameters.id = 3)
group by products.id ...
having count=3
(т.е. по трём параметрам совпадает)

Или существует более изящное решение?

Не в сети

#2 01.05.2016 14:16:41

Re: MySQL

Меня на собеседовании (Laravel разраб) недавно тоже просили составить подобные запросы. Мне не понятно, зачем вообще использовать Laravel и другие современные фреймворки, если вы не пользуетесь их "прелестями"? Учите Eloquent и свзяи. В итоге получите легко читаемый и поддерживаемый код вместо того, что у вас в посте. Представьте, что будет, когда параметров будет не 3, а 13.

Не в сети

#3 08.11.2016 17:30:37

Re: MySQL

Я бы создал view

create view match3 as select productID,Count(parmID) FROM продукт_параметр GROUP BY productID HAVING Count(parmID) =3

Итоговый запрос банален:

SELECT продукты.* FROM JOIN match3 On (продукты.id=match3.productID)

Не в сети

#4 08.11.2016 20:58:12

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: MySQL

А вообще лучше сделать архитектуру по шаблону Entity Attribute Value

Изменено TrueKanonir (08.11.2016 20:59:01)

Не в сети

Подвал раздела