Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Skomplikowane zapytanie; łączenie zapytań; kilka select'ów w jednym zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
TheRiko
Witam.

Jakiś czas męczę się z zapytaniem. Chcę zrobić ranking punktów i w tym celu pobrać informacje z kilku tabel.
Chcę wyciągnąć takie dane: id, postac, skarb, suma regiment_ilosc, suma budynek_ilosc. Wszystko posortowane wedlug id usera i bez powtorzen.

users
id | postac | skarb

oddzialy
oddzial_id | user_id

regimenty
oddzial_id | SUM(regiment_ilosc)

budynki
user_id | SUM(budynek_ilosc)

Jak najprościel to zrobić?

Próbowałem kilkoma metodami:
<!--Geshi:323869:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">[PHP] <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>r<span class="sy0">.</span>oddzial_id GROUP BY o<span class="sy0">.</span>oddzial_user_id</div><li class="li2"><div class="de2"> <span class="br0">)</span> w</div><li class="li1"><div class="de1"> WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] <a href='./Pobierz-Plik-323870.html' target='_blank_t0'>bl</span> u LEFT <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_user_id<span class="sy0">=</span>u<span class="sy0">.</span>id LEFT <span class="kw3">JOIN</span> <span class="re0">$regimenty_users_tbl</span> r ON r<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>o<span class="sy0">.</span>oddzial_id LEFT <span class="kw3">JOIN</span> <span class="re0">$budynki_users_tbl</span> b ON b<span class="sy0">.</span>user_id<span class="sy0">=</span>u<span class="sy0">.</span>id WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] [topic=0]bl</span> r LEFT <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>r<span class="sy0">.</span>oddzial_id GROUP BY o<span class="sy0">.</span>oddzial_user_id</div><li class="li2"><div class="de2"> <span class="br0">)</span> w</div><li class="li1"><div class="de1"> WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] <a href='./Pobierz-Plik-323870.html' target='_blank, <a href='Plaintext-323870.html' target='_blank_t0'>bl</span> r LEFT <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>r<span class="sy0">.</span>oddzial_id GROUP BY o<span class="sy0">.</span>oddzial_user_id</div><li class="li2"><div class="de2"> <span class="br0">)</span> w</div><li class="li1"><div class="de1"> WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] <a href='./Pobierz-Plik-323870.html' target='_blank_t0'>bl</span> u LEFT <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_user_id<span class="sy0">=</span>u<span class="sy0">.</span>id LEFT <span class="kw3">JOIN</span> <span class="re0">$regimenty_users_tbl</span> r ON r<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>o<span class="sy0">.</span>oddzial_id LEFT <span class="kw3">JOIN</span> <span class="re0">$budynki_users_tbl</span> b ON b<span class="sy0">.</span>user_id<span class="sy0">=</span>u<span class="sy0">.</span>id WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] [topic=0]bl</span> r LEFT <span class="kw3">JOIN</span> <span class="re0">$oddzialy_users_tbl</span> o ON o<span class="sy0">.</span>oddzial_id<span class="sy0">=</span>r<span class="sy0">.</span>oddzial_id GROUP BY o<span class="sy0">.</span>oddzial_user_id</div><li class="li2"><div class="de2"> <span class="br0">)</span> w</div><li class="li1"><div class="de1"> WHERE u<span class="sy0">.</span><span class="kw3">stat</span><span class="sy0">=</span><span class="st0">'ok'</span> GROUP by u<span class="sy0">.</span>id</div>
[/list]<div class="foot">[PHP] <a href='./Pobierz-Plik-323870.html' target='_blank, <a href='Plaintext-323870.html' target='_blank </div></pre><!--/Geshi:323870:php-->
Tu próbowałem pobrać z zagnieżdżonym select'em, ale już przy pobieraniu samej ilosci zolnierzy napotkałem błąd, a mianowicie nie bierze pod uwagę tego w pętli while i dla każdego usera wyświetla tą samą ilość jaka jest u pierwszego (tak jakby nie brało pod uwagę GROUP by.

Miałem jeszcze kilka innych pomysłów ale nie warte wspominania bo wyświetlało je z błędem. Ma ktoś jakiś pomysł?



// EDIT

Poradziłem sobie w zupełnie inny sposób - na tablicach. Można zamknąć.
Beacri
Hej, w jaki sposób to zrobiłeś? Bo mam podobny problem temat niżej:
Temat: MySQL algorytm wyciagania danych z bazy

Czy zrobiłeś coś podobnego do mojego II sposobu?
TheRiko
Twój problem jest troszeczkę inny i uproszczony. Ale widzę że już sobie poradziłeśsmile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.