Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Pobieranie nazw wszystkich kategorii za pomocą
Vercio
post 25.07.2019, 19:57:25
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.07.2010

Ostrzeżenie: (0%)
-----


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:
  1. SELECT p.*, c.name AS category_name FROM products AS p, categories AS c WHERE FIND_IN_SET(c.id, p.categories)


Teoretycznie mi pobiera wszystkie nazwy kategorii ale produkt mi dubluje. Wynik tego jest następujący:

PRODUKT | KATEGORIA
-----------------------------------
Kurtka | Odzież zimowa
Trampki | Odzież letnia
Kurtka | Pikowana

Wynik chciałbym uzyskać mniej więcej taki:

PRODUKT | KATEGORIA
-----------------------------------
Kurtka | Odzież zimowa, Pikowana
Trampki | Odzież letnia

Może użyć SELECT w SELECTie ? Co myślicie ? Chciałem to ugryźć jednym zapytaniem
Go to the top of the page
+Quote Post
sazian
post 25.07.2019, 20:20:58
Post #2





Grupa: Zarejestrowani
Postów: 1 015
Pomógł: 137
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


  1. SELECT p.NAME, group_concat(c.name SEPARATOR ', ') AS category_name
  2. FROM products AS p
  3. JOIN categories AS c ON c.id= p.categories
  4. GROUP BY p.ID
Go to the top of the page
+Quote Post
Vercio
post 25.07.2019, 20:59:55
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.07.2010

Ostrzeżenie: (0%)
-----


Super działa! z małą poprawką

tą linijkę

  1. JOIN categories AS c ON c.id= p.categories

zamieniłem na:
  1. JOIN categories AS c ON FIND_IN_SET(c.id, p.categories)


Ten post edytował Vercio 25.07.2019, 21:01:08
Go to the top of the page
+Quote Post
sazian
post 26.07.2019, 19:09:13
Post #4





Grupa: Zarejestrowani
Postów: 1 015
Pomógł: 137
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.09.2019 - 15:42