![]() |
![]() |
![]()
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:
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? -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Użyj podzapytania i IN
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 79 Pomógł: 12 Dołączył: 23.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Najwygodniej będzie podzielenie tego na dwa zapytania. Pierwszym pobierasz newsy, potem w pętli wyodrębniasz id newsów. Następnie tworzysz zapytanie pobierające kategorie dla tych postów.
Rozwiązanie to jest bardzo wygodne, dodatkowo nie obciąża też serwera. -------------------- ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 6 Dołączył: 2.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Użyj podzapytania i IN A możesz na przykładzie pokazać jak to zrobić. Kombinuje ale nie wychodzi mi za bardzo.
Przy takim zapytaniu otrzymuje dodatkowo pola z news_to_categories z wartością NULL. Najwygodniej będzie podzielenie tego na dwa zapytania. Pierwszym pobierasz newsy, potem w pętli wyodrębniasz id newsów. Następnie tworzysz zapytanie pobierające kategorie dla tych postów. Nie rozumiem, mam dać zapytania w pętli? Raczej takie coś nie będzie optymalne dla serwera.
Rozwiązanie to jest bardzo wygodne, dodatkowo nie obciąża też serwera. -------------------- |
|
|
![]()
Post
#5
|
|
![]() 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.
-------------------- ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż strukturę swoich tabel to Ci napiszę jedno zapytanie co to załatwi
edit: Coś takiego:
-------------------- |
|
|
![]()
Post
#7
|
|
![]() 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... -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 6 Dołączył: 2.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Dobra trochę zwątpiłem w swoje możliwości. Mógłby ktoś mi podać przykładowe zapytania. Aby pobrać wpisy(np newsy) i aby do każdego był przypisane kategorie do których należy.
Przykładowa struktura tabel: Kod News: -id -title -text Categories -id -title News_to_Categories -newsId -categoryId Z góry dzięki. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Możesz to zrobić na jednym zapytaniu. Kategorie zostaną zwrócone w formie nazw oddzielonych np. przecinkiem. Możesz również prócz nazwy kategorii wybrać jej id (tworzysz wtedy ciag np. id1:nazwa1|id2:nazwa2|id3:nazwa3). Czego użyć? GROUP_CONCAT
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 6 Dołączył: 2.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
No dobra udało mi się, powstało mi już jakieś ciekawsze zapytanie. Ale spotkałem jeszcze jeden problem.
Gdy chcę pobrać wpisy tylko z konkretnej kategorii "WHERE a_news.show = 1 AND a_categories.url = '$category'" w kolumnie gdzie powinienem mieć zgrupowane wszystkie kategorie newsa, a mam tylko i wyłącznie tą jedna dopasowaną do warunku z WHERE, czy da się jakoś zrobić żeby ten warunek nie rzutował na wynik join-ów lub group? -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 36 Dołączył: 31.03.2006 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj tak:
Przy czym $category to nie url tylko id kategorii. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 19:55 |