Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] jak by podwojne sortowanie
djbarca
post 4.02.2009, 07:46:01
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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. .
Go to the top of the page
+Quote Post
ayeo
post 4.02.2009, 07:48:33
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%)
-----


Witaj!

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

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
djbarca
post 4.02.2009, 13:48:13
Post #3





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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 ?
Go to the top of the page
+Quote Post
nospor
post 4.02.2009, 13:58:45
Post #4





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
djbarca
post 4.02.2009, 14:08:56
Post #5





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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
Go to the top of the page
+Quote Post
Crozin
post 4.02.2009, 14:11:26
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. SELECT id, tresc, login FROM tbl_name WHERE typ1 > typ2 ORDER BY punkty, posty;
O takie coś Ci chodzi?
Go to the top of the page
+Quote Post
djbarca
post 4.02.2009, 14:20:15
Post #7





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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...

Ten post edytował djbarca 4.02.2009, 14:22:04
Go to the top of the page
+Quote Post
nospor
post 4.02.2009, 14:30:28
Post #8





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kefirek
post 4.02.2009, 14:31:38
Post #9





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


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. ?>


Ten post edytował kefirek 4.02.2009, 14:33:26
Go to the top of the page
+Quote Post
djbarca
post 4.02.2009, 16:22:32
Post #10





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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 :/

Ten post edytował djbarca 4.02.2009, 16:43:15
Go to the top of the page
+Quote Post
KCG
post 4.02.2009, 18:36:06
Post #11





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


Trzymaj liczbę postów w tabeli i masz z głowy.
Funkcje grupowe przydadzą się na przyszłość smile.gif


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
djbarca
post 4.02.2009, 19:38:09
Post #12





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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
Go to the top of the page
+Quote Post
KCG
post 4.02.2009, 22:11:05
Post #13





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


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ą.


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
djbarca
post 5.02.2009, 11:16:48
Post #14





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


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ś?
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 23:56