Nigdy nie byłem pro w zapytaniach SQL (będzie trzeba w końcu nadrobić braki), ale muszę poradzić sobie z takim zadaniem i mam nadzieję, że ktoś z was ogarnia :)
Piszę apkę przeszukującą themesy pod wordpressa na podstawie ich właściwości (features). Każdy Theme może mieć kilka Feature za pośrednictwem ThemeFeature (relacja Theme hasmany Features :through => ThemeFeatures) .
Moim zadaniem jest zbudować zapytanie SQL, które pobierze z bazy danych wszystkie Themes, które posiadają podane Feature.
Przykład:
Themes
id| name
1 | szablona
2 | szablonb
Features
id | name
1 | responsywnosc
2 | support
3 | różne kolory
4 | różne typy postów
ThemeFeatures
themeid | featureid
1 | 2
1 | 3
2 | 3
2 | 4
Więc kiedy na wejście podam id Featurs [3, 4] to powinno zwrócić szablonb, kiedy podam Featurs [3] to powinno zwrócić szablona i szablonb (oba mają różne kolory).
Moje pierwsze podejście do tematu było takie: Theme.joins(:features).where(:features => {:id => [3, 4]}) niestety takie zapytanie w skrócie generuje SELECT FROM Themes ... JOIN Features ... WHERE.... .... features.id IN (3, 4) .... , czyli pobierze wszystkie Themes, które posiadają features znajdujące się w tablicy, co jest błędne ponieważ zwrócą się w tym wypadku szablona i szablonb, a powinien zwrócić się tylko szablon_b.
Chodzi, o to, żeby pobrać Theme, które mają dokładnie wszystkie Features.id, które znajdują się w tablicy, a nie którykolwiek z nich.
Na pewno jest jakieś prosta, fajna formuła SQL, której nie mogę wygooglować, dlatego mirkuję tutaj ;]
nie pójdę więcej na siłownie, dzisiaj poszłam poćwiczyć brzuch na ławce. Najpierw jakiś chłop ciągle się podejrzanie gapił, potem drugi i widziałam jak śmieje się pod nosem. Wróciłam do domu i od razu się rozbeczałam #sport #silownia
Nigdy nie byłem pro w zapytaniach SQL (będzie trzeba w końcu nadrobić braki), ale muszę poradzić sobie z takim zadaniem i mam nadzieję, że ktoś z was ogarnia :)
Piszę apkę przeszukującą themesy pod wordpressa na podstawie ich właściwości (features). Każdy Theme może mieć kilka Feature za pośrednictwem ThemeFeature (relacja Theme hasmany Features :through => ThemeFeatures) .
Moim zadaniem jest zbudować zapytanie SQL, które pobierze z bazy danych wszystkie Themes, które posiadają podane Feature.
Przykład:
Themes
id| name
1 | szablona
2 | szablonb
Features
id | name
1 | responsywnosc
2 | support
3 | różne kolory
4 | różne typy postów
ThemeFeatures
themeid | featureid
1 | 2
1 | 3
2 | 3
2 | 4
Więc kiedy na wejście podam id Featurs [3, 4] to powinno zwrócić szablonb, kiedy podam Featurs [3] to powinno zwrócić szablona i szablonb (oba mają różne kolory).
Moje pierwsze podejście do tematu było takie: Theme.joins(:features).where(:features => {:id => [3, 4]}) niestety takie zapytanie w skrócie generuje SELECT FROM Themes ... JOIN Features ... WHERE.... .... features.id IN (3, 4) .... , czyli pobierze wszystkie Themes, które posiadają features znajdujące się w tablicy, co jest błędne ponieważ zwrócą się w tym wypadku szablona i szablonb, a powinien zwrócić się tylko szablon_b.
Chodzi, o to, żeby pobrać Theme, które mają dokładnie wszystkie Features.id, które znajdują się w tablicy, a nie którykolwiek z nich.
Na pewno jest jakieś prosta, fajna formuła SQL, której nie mogę wygooglować, dlatego mirkuję tutaj ;]
Komentarz usunięty przez autora