Cześć,
Mam mam małe pytanie, mam dwie tabele products i categories. Wyglądają mniej więcej tak
Tabela Products
NAME | CATEGORIES |
--------------------------------------
Kurtka | 1,3
Trampki | 2
Tabela Categories
ID | NAME |
----------------
1 | Odzież zimowa
2 | Odzież letnia
3 | Pikowana
I teraz mam takie zapytanie na liście produktów, chciałbym pobrać wszystkie nazwy kategorii dla danego produktu
Mam takie zapytanie:
SELECT p.*, c.name AS category_name FROM products AS p, categories AS c WHERE FIND_IN_SET(c.id, p.categories)
SELECT p.NAME, group_concat(c.name SEPARATOR ', ') AS category_name FROM products AS p JOIN categories AS c ON c.id= p.categories GROUP BY p.ID
Super działa! z małą poprawką
tą linijkę
JOIN categories AS c ON c.id= p.categories
JOIN categories AS c ON FIND_IN_SET(c.id, p.categories)
Faktycznie nie zauważyłem że masz źle zaprojektowaną tabelę,
CATEGORIES powinno być typu int tak samo jak ID w Categories.
Jeśli to ma być relacja jeden do wielu to potrzebujesz jeszcze tabelę pośredniczącą.
Przy obecnym projekcie baza nie jest atomowa, a przez to nie będzie korzystała z indeksów przez co będzie potwornie wolna.
Nie mówiąc już o tym że będzie niesamowicie upierdliwa podczas edycji - spróbuj np. usunąć kategorię o id 1
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)