Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Relacja wiele do wileu w jednym rekordzie
Siner
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


Witam,
mam 3 tabele, news, categories, news_to_categories. Chciałem pobrać news i kategorie dla danego wpisu w taki sposób:
  1. SELECT *
  2. FROM `a_news` n
  3. LEFT JOIN a_news_to_categories nc ON n.id = nc.newsID
  4. LEFT JOIN a_categories c ON c.id = nc.categoryId

Tylko w przypadku gdy do news przypisane są 3 kategorie to są zwracane mi 3 rekordy z takimi samymi kolumnami tylko innymi kategoriami. Czy da się stworzyć takie zapytanie żeby wszystko było zwrócone w jednym rekordzie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MMPrime
post
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 12
Dołączył: 23.04.2008

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


Najpierw pobierasz wszystkie newsy, wyodrębniasz id tych newsów w pętli. Następnie poza pętla budujesz zapytanie SQL z wyodrębnionych danych.
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


(miałem coś skomentować, ale sobie daruję)

Co do problemu Siner, to niestety ale wiersz by musiał nie być rekordem, a obiektem... Chyba że się robi inne triki, ale to tylko w szczególnych przypadkach.
Np. jak do News'a potrzebujesz string'a z nazwami kategorii oddzielonymi przecinkami, bo da się to zrobić jednym zapytaniem, ale jak potrzebujesz wszystkich danych to jest już problem, bo nie da się tego "ładnie" zrobić. (ORM to robi, ale to dla każdego News'a pobiera jego kategorie, więc jest n+1 zapytań do bazy (n - liczba news'ów)

P.S. Przeczytałem jeszcze raz pierwszego posta w temacie, więc moim zdaniem użyć 2 kwerend...
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 20:24