Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jak by podwojne sortowanie
Forum PHP.pl > Forum > Przedszkole
djbarca
Witam. mam problem. mam tabele a w niej pktuzytkownika oraz Napisaneposty. I chce to po po sortowac w sposob taki ze najpiepw sa brane pkt a pozniej jesli liczba jest rowna to ilosc napisanych postow. cos w tabeli ligowej. .to pierwsze zrobilem. czyli zeby mi sortowalo wg pkt. ale nie mam pomyslu jak to tego dolaczyc to drugie sortowanie. .
ayeo
Witaj!

Czemu dałeś taga PHP? W zapytaniu SQL robisz "ORDER BY punkty, posty" na końcu.

Pozdrawiam!
djbarca
nie. zle to ujalem .. w bazie mam login i pkt .. a liczbe napisanych postow zlicza mi funkcja licz_napisane_posty($login); chodzi mi o to zeby posortowac to wg punktow .. ale jesli pkt beda takie same to wtedy pod uwage trzeba wziac napisane posty .. o to mi chodzi .. smile.gif hm ?
nospor
troche odejde od tematu:
Cytat
a liczbe napisanych postow zlicza mi funkcja licz_napisane_posty($login);

Ale wiesz, ze to wszystko mozna uzyskac jednym zapytaniem poprzez uzycie funkcji grupujących? Bedzie zdecydowanie optymalniej
djbarca
no dobra a jesli ja mam te posty w dziale opinie i ma zliczac tylko te w ktorych typ ='1'
czyli mam w tabeli opinie
id tresc login typ1 typ2
i ma zliczac te ktorych np typ1>typ2 (gdzie tutaj zawsze jest albo 0 albo 1 ) .. hm
Crozin
  1. SELECT id, tresc, login FROM tbl_name WHERE typ1 > typ2 ORDER BY punkty, posty;
O takie coś Ci chodzi?
djbarca
raczej nie bo Ty tutaj chcesz wyswietlic je w kolejnosci punkty,posty .. i pod warunkiem ze typ1>typ2 . a mi nie o to chodzi .
tabela Uzytkownicy
id - login - pkt

tabela opinie
id - tresc - login - typ1 - typ2

a ja musze zliczyc te posty ktore maja typ1>typ2

a potem uzytkownikow posortowac wg pkt.. i jestli pkt sa dla 2 uzytkownikow ale 'stojacych' obok siebie takie same to musze wykozystac liczbe napisanych przez nich postow ...
czyli dla przyzkladu ..
1. pawel - 10
2. mariusz - 26
3. marek - 55
4. mateusz - 55

to powinno ich posortowc wg pkt ...
czyli
3. marek - 55
4. mateusz - 55
2. mariusz - 26
1. pawel - 10


i teraz marek i mateusz maja tyle samo pkt . wiec musze im dla osobna policzyc ile maja postow .. i ten co ma wiecej jest wyzej smile.gif a moze jakos nie wiem tabliece dwuwymiarowa zrobic albo jakis inny sposob smile.gif? hm...
nospor
w tabeli opinie powinno byc id uzytkownika a nie login.

No ale zostajac przy loginie

  1. SELECT u.login, u.pkt, count(o.login) posty FROM uzytkownicy u
  2. LEFT JOIN opinie o ON (u.login = o.login AND typ1>typ2)
  3. GROUP BY u.login ORDER BY pkt DESC, count(o.login) DESC
kefirek
Moze o takie cos chodzi
  1. <?php
  2. $wynik = mysql_query("SELECT u.*, (SELECT COUNT(o.id) FROM opinie o WHERE typ1 > typ2 AND o.login=u.login) AS posty FROM Uzytkownicy u ORDER BY pkt
  3. DESC, posty DESC");
  4. ?>
djbarca
wow... byc moze i o to chodzi .. ale ja miałem w planach to jakos przerobic. bede musial poczytac o Funkcjach grupowych i wogole bo cienko z tym stoje :/
KCG
Trzymaj liczbę postów w tabeli i masz z głowy.
Funkcje grupowe przydadzą się na przyszłość smile.gif
djbarca
hm . zastanawialem sie nad tym ale to bylo by bez sensu.. proboje przerobic zapytanie NOSPOR'a ale jakos nie moge .
teraz musze zrobic cos takiego(z tamtym problemem sobie jakos poradzilem) teraz musze zrobic cos podobnego ... ale bardziej (przynajmiej tak mi sie zdaje ) skomplikowanego ..
mam dalej tabele z uzytkownikami
id - login
oraz tabele mecze w w niej
id identyfiktor
n1 - nazwa gracza 1
n2 - nazwa gracza 2
w1 - wynik gracza 1
w2 -wynik gracza 2
i teraz problem tkwi w tym ze musze zrobic tabele ligowa..
lacze sie z baza pobieram userow i i musze to pogropowac w sposob podobny do tamego .. tylko ze najpierw zliczam pkt danego uzytkownika ( z wszyskich meczy z jego udzialem )
czyli if w1>w2 to pkt=3 else pkt=0 remisy nie sa uwzgledniane..
a potem jesli pkt sa takie same to musze policzyc dla niego roznice bramek czyli najpierw musze mu zliczyc bramki strzelone przez niego i od tego odjac bramki stracone.. wieksza roznica bramek - wieksze miejsce .. niewiem jak sie za to zabrac :/ pls pomozcie smile.gif
KCG
Może w tabeli z użytkownikami dodaj pola punktów i bilans bramek, o to chodzi? Potem masz wyniki każdego user'a pod ręką.
djbarca
tez nad tym myslalem .. ale to co robie bedzie mialo mecze ligowe, puchary dnia, turnieje .. itp . i w kazdym bedzie mi potrzebne to sortkowanie troche glupio bylo by tak do 3 rodzajow spotkan dodawac pkt,r_bramek bo tego przybylo by troche.. ale nie smile.gif posiedzialem poczytalem troch i cos zrozumialem z tego . nieduzo ale jednak .. napisalem cos takiego

  1. <?php
  2. $w = mysql_query("SELECT u.id,SUM(w.w1),SUM(w.w2),u.login,SUM(w.w1-w.w2),COUNT(w.id) FROM uzytkownicy u INNER JOIN wyzwania w ON u.id=w.n1
  3.  
  4. || u.id=w.n2 GROUP BY u.id ORDER BY 'SUM(w.w1-w.w2)' DESC;");
  5.  
  6. print "<table border=1><tr><td>Id usera</tD><td>Strzelone Bramki</tD><td>Stracone Bramki</tD><td>Login usera</tD><td>Roznica
  7.  
  8. Bramek</tD><td>Rozegranych Spotkan</tD></tR>";
  9. while ($r=mysql_fetch_array($w)) {
  10. print "<tr><td>$r[0] </TD><tD> $r[1] </tD><td> $r[2] </tD><td>$r[3]</td><td>$r[4]</td><td>$r[5]</td><td>$r[6]</td></tR>";
  11. }
  12. ?>
to prawie w 100% spelnia to czego chce .. nie wiem jeszzcze tylko jak w takim czyms uformowac warunek .. ze jesli w.w1 > w.w2 to sa 3 pkt dla uzytownika u.id rownego w.n1 i drugi warunek to jesli w.w1<w.w2 to sa 3 pkt dla uzytkownika u.id rownego w.n2 winksmiley.jpg tylko tego mi do szczescia brakuje (oprocz dobrego samochodu) =)

hm.. pomoże ktoś?
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.