Pentiums Posted March 12, 2009 Report Share Posted March 12, 2009 ir spēles lietotāju tabula (lietotaja_id | punkti) Kā var dabūt lietotāja vietu vadoties pēc punktiem? (Ja vispār var) Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted March 12, 2009 Report Share Posted March 12, 2009 Varbūt šādi: SELECT DISTINCT punktu_skaits, count(punktu_skaits) FROM lietotāju tabula WHERE punktu_skaits > $lietotaja_punktu_skaits; Quote Link to comment Share on other sites More sharing options...
Pentiums Posted March 12, 2009 Author Report Share Posted March 12, 2009 bet ja spēlētāji ir ap 1000 tas nepaņems slodzi? ja ņem vērā ka jāizvada vieta pie katra spēles soļa? Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted March 12, 2009 Report Share Posted March 12, 2009 Lai kā to arī neuzrakstītu, šāda veida statistiska informācija, kas ietver arī visu citu lietotāju detaļu caurskati, nozīmēs bremzi, jo ir jāapskatās visi citi lietotāji un tā vieta jāizrēķina. Otra iespēja, protams, ir pie katrām izmaiņām šo vetu izklakulēt un visiem iesaistītajiem litotājiem to pamainīt, tb glabāt kā atsevišķu infu, bet tā būs bremze pie katras izmaiņas. Šāda veida statistiska info nav domāta, lai to rādītu katrā solī. Lai lietotāji ver vaļā atsevišķu sava profila lapu vai kaut ko tādu un tur arī Tu to izrēķināsi. Tā kā to viņi vērs vaļā relatīvi reti, nebūs arī nekādu satraukumu par nevajadzīgu noslodzi. Šis ir tipisks piemērs sliktai prasībai, kas ved uz aplikācijas bremzēšanu un gala rezultātā nebūs laimīgs neviens - ne lietotāji, kam pie katra soļa bremzēs lapa, ne izstrādātājs, kuram mazgās galvu par to, ka viņa produkts bremzē. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
werd Posted March 13, 2009 Report Share Posted March 13, 2009 (edited) Piekritīšu Gintam par to, ka šādu info vajadzētu izvadīt kādā profile lapā, bet vēl vari mēģināt glabāt spēlētāja punktus sesijas mainīgajā, tādējādi tev nebūs visu laiku jāizsauc query - to dari, pieņemsi, ik pēc 10 minūtēm, tas ir atjauno datus! Edited March 13, 2009 by phpjanis Quote Link to comment Share on other sites More sharing options...
Kaklz Posted March 13, 2009 Report Share Posted March 13, 2009 būtībā to var realizēt ar aptuveni šādu mehānismu MySQL mysql_query("SET @pos = 0"); mysql_query("UPDATE `players` SET `pos` = @pos:=(@pos+1) ORDER BY `points` DESC"); Vienīgā nianse, ka šādus jokus var laist tikai fonā un tikai pa kaut kādam laika intervālam - teiksim reizi 5 vai 10 minūtēs, atkarībā no vajadzības. Kad šis tiek izpildīts, tad jau vairs atliek tikai selektēt pēc lietotāja identifikatora un iegūsi vietu laukā "pos". Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted March 13, 2009 Report Share Posted March 13, 2009 Kaklz, vai Tavs mehānisms ieliek vienu un to pašu vietu cilvēkiem, kam ir vienāds punktu skaits? :) Quote Link to comment Share on other sites More sharing options...
Kaklz Posted March 13, 2009 Report Share Posted March 13, 2009 Nē, šis mehānisms neparedz dalītas vietas :) Quote Link to comment Share on other sites More sharing options...
codez Posted March 13, 2009 Report Share Posted March 13, 2009 (edited) Šādi cilvēkiem ar vienādu punktu skaitu būs viena un tā pati vieta: SELECT id,@rp:=@rp+1 as pos,if(@op=p,@p,@p:=@rp) as real_rank,@op:=p as points FROM test,(SELECT @p:=0,@op:=0,@rp:=0) as t ORDER BY p DESC; Edited March 13, 2009 by codez Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.