Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Ułożenie zapytanie z JOIN
kamilos12
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


Witam,
załóżmy że mam dwie tabelki:

ZDJĘCIA
- id
- nazwa
- opis
- autor

EFEKTY
- id
- id_zdjecia
- efekt

I chciałbym wyświetlić jedno zdjęcie oraz wszystkie efekty (może ich być np. 5) W jaki sposób ułożyć zapytanie? Bo dostaje tylko jeden efekt.

Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No a jakie ty masz zapytanie?
Go to the top of the page
+Quote Post
kamilos12
post
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


W przybliżeniu:

  1. $this->db->query("SELECT * FROM " . DB_PREFIX . "zdjecia AS zdjecia LEFT JOIN " . DB_PREFIX . "efekty AS efekty ON zdjecia.id = efekty.zdjecie_id WHERE zdjecie.id = '{$id}'");

Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No i zapytanie jest ok. Widac zle odbierasz dane, skoro dostajesz tylko jeden rekord. To zapytnie zwraca tyle rekordow ile masz efektow dla danego zdjecia
Go to the top of the page
+Quote Post
kamilos12
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


No tak, jak wrzucę w pętle to dostaje więcej, ale jak to teraz obrobić? Nie da się zrobić tak żeby efekty były w dodatkowej tablicy??
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Jak chcesz efekty wydzielic do oddzielnej tablicy to nie ma bata, musisz to zrobic sam w php (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamilos12
post
Post #7





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


No chyba tak, bo np. chcąc dostać nazwę zdjęcia muszę odwołać się do zerowego elementu: $zdjecie[0]['nazwa'] itd.
Muszę chyba jakiś paser do tego napisać.

Dzięki za pomoc (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
phpion
post
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Albo rozbić to na 2 zapytania: 1 do pobrania informacji o zdjęciu, 2 do pobrania informacji o efektach. Mniejsza ilość zapytań nie zawsze jest lepsza. Przykładowo tutaj w wyniku otrzymasz nadmiarowość danych: zdublowane dane dotyczące zdjęcia. Dla kilku rekordów może nie jest to nic strasznego, ale dla większych zbiorów różnica może być wyraźnie odczuwalna. Ja bym to ciachnął 2 zapytaniami.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
No chyba tak, bo np. chcąc dostać nazwę zdjęcia muszę odwołać się do zerowego elementu: $zdjecie[0]['nazwa'] itd.

Kazdy rekord zawiera nazwe zdjecia a nie tylko pierwszy.
Rekordy roznią sie tylko efektami.

Cytat
Albo rozbić to na 2 zapytania: 1 do pobrania informacji o zdjęciu, 2 do pobrania informacji o efektach. Mniejsza ilość zapytań nie zawsze jest lepsza. Przykładowo tutaj w wyniku otrzymasz nadmiarowość danych: zdublowane dane dotyczące zdjęcia. Dla kilku rekordów może nie jest to nic strasznego, ale dla większych zbiorów różnica może być wyraźnie odczuwalna. Ja bym to ciachnął 2 zapytaniami.
Nie widze sensu tutaj dwoch zapytan, ktore bedą i tak wolniejsze od tego jednego.
A jesli tak bardzo boli nadmiarowosc danych, to mozna przeciez uzyc GROUP BY oraz GROUP_CONCAT a wowczas wszystkie efekty i zdjecie będą w jednym rekordzie.
Go to the top of the page
+Quote Post
kamilos12
post
Post #10





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


Dobra, to mam jeszcze jeden problem. Będę chciał wyświetlić 100 zdjęć i każde ma od 3 do 6 efektów i jak to udźwignąć? Bo w ten sposób będę miał zwrócone 100 * (3,6) tablic?
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




http://nospor.pl/grupowanie-wynikow.html

Masz tam tez przyklad z GROUP BY. Tak wiec do wyboru do koloru (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamilos12
post
Post #12





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


Okej, dzięki przyglądnę się temu. A miałbyś czas napisać samego sql do tego przykładu? Bo jednak na swoim kodzie człowiek szybciej łapie.
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Sql przeciez juz masz.... wystarczy ze wywalisz WHERE, ktore ogranicza cie tylko do jednego zdjecia.
Go to the top of the page
+Quote Post
kamilos12
post
Post #14





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


Nie działa mi to za bardzo :/
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Jak chcesz pomocy, to pisz pelnymi zdaniami. "Nie dziala" to mowią dzieci w zlobki a nie programisci
Go to the top of the page
+Quote Post
kamilos12
post
Post #16





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


No okej, nie rozumiem po prostu niektórych rzeczy w tym zapytaniu, nie stosujesz nigdzie Aliasów typu p a do nich się odwołujesz, popraw mnie jak się mylę.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Jak to nie definiuje aliasu p.....
A to:
left join product p
to niby co to jest? Czytasz w ogole co tam jest napisane czy tylko czekasz az zrobie to za ciebie?
Go to the top of the page
+Quote Post
kamilos12
post
Post #18





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 20.03.2010

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


Okej, no tak, chodź użycie AS byłoby bardziej czytelne. Z punktu optymalizacji to lepiej skorzystać z group() czy obrobić to w php?
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
chodź użycie AS byłoby bardziej czytelne
Czytanie a nie udawanie ze sie czyta tez byloby o wiele czytelniejsze... Masz tam prosty, krotki sql i masz problem ze znalezieniem aliasu P. To naprawde nie jest spowodowane brakiem AS.

Cytat
Z punktu optymalizacji to lepiej skorzystać z group() czy obrobić to w php?
Nie wiem. Ja osobiscie rzadko kiedy korzystam z GROUP w takich sytuacjach
Go to the top of the page
+Quote Post

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: 6.10.2025 - 17:05