Oke, bedankt!quote:Op zondag 8 januari 2012 23:37 schreef GlowMouse het volgende:
Precies zo. Alleen dan nog eentje bij het resultaat optellen.
Veel doeltreffender.quote:Op zondag 8 januari 2012 23:40 schreef dirkjo het volgende:
[..]
Oke, bedankt!
je houdt het trouwens wel lang vol om iemand niet het antwoord te geven, maar zelf te laten maken
Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat nietquote:Op zondag 8 januari 2012 23:37 schreef GlowMouse het volgende:
Precies zo. Alleen dan nog eentje bij het resultaat optellen.
Dan moet je die andere lijst aanpassen zodat hij zo wordt:quote:Op zondag 8 januari 2012 23:48 schreef dirkjo het volgende:
[..]
Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat niet
En toch heb je geen garantie dat het niet verandert.quote:Je zei dat dat bij die oude query toevallig zo gebeurde, maar na een flink aantal refreshes blijft die lijst precies hetzelfde.
Je doet het nu door te selecteren op het aantal likes?quote:Op zondag 8 januari 2012 23:48 schreef dirkjo het volgende:
[..]
Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat niet
Je zei dat dat bij die oude query toevallig zo gebeurde, maar na een flink aantal refreshes blijft die lijst precies hetzelfde.
//edit
Deze manier geeft zelfs bij meerdere nummers dezelfde rank, terwijl dit toch echt iets is wat niet mag gebeuren
1 2 3 4 5 6 7 8 | SET @rownum := 0; SELECT * FROM ( SELECT @rownum := @rownum+1 AS song_rank, likes FROM songs ORDER BY likes DESC ) AS song_score WHERE songID = " . $songID |
Ik gebruik nu de manier van GM, een paar posts terug.quote:Op zondag 8 januari 2012 23:55 schreef The_Terminator het volgende:
[..]
Je doet het nu door te selecteren op het aantal likes?
[ code verwijderd ]
Bovenstaande zou je de rank terug moeten geven adhv het songid.
Ah, ok. Ik heb mijn code zojuist wat aangepast en getest. Het functioneerd goed en geeft de positie terug adhv een gegeven songID, zoals je dat in je eerste versie had.quote:Op zondag 8 januari 2012 23:57 schreef dirkjo het volgende:
[..]
Ik gebruik nu de manier van GM, een paar posts terug.
Heldquote:Op maandag 9 januari 2012 00:02 schreef GlowMouse het volgende:
Wijzig
SELECT songID FROM songs ORDER BY `likes` DESC
in
SELECT songID FROM songs ORDER BY `likes` DESC,songID DESC
En
SELECT COUNT(*) AS rank FROM songs WHERE likes > ...
in
SELECT COUNT(*) AS rank FROM songs WHERE likes > ... OR (likes = .... ANDS songID > ....)
Dit gebruik ik nu en werkt:quote:Op maandag 9 januari 2012 00:07 schreef The_Terminator het volgende:
[..]
Ah, ok. Ik heb mijn code zojuist wat aangepast en getest. Het functioneerd goed en geeft de positie terug adhv een gegeven songID, zoals je dat in je eerste versie had.
1 2 3 | <?php $rankQuery = mysql_query("SELECT COUNT(*) AS rank FROM songs WHERE `likes` > ". $likes. " OR (`likes` = '". $likes ."' AND `songID` > ". $songID .")"); ?> |
True.quote:Op maandag 9 januari 2012 00:09 schreef GlowMouse het volgende:
maar die van mij is uiteraard sneller.
Oke, duidelijk!quote:Op maandag 9 januari 2012 21:13 schreef GlowMouse het volgende:
Dat is het inderdaad. Als jij een query zonder COUNT(*) doet dan gaan alle rijen van MySQL naar PHP zodat PHP ze kan tellen.
1 2 3 4 5 | SELECT Naam, Challenge, Voortgang, ( Voortgang / ( Challenge /100 ) ) AS Percentage FROM hardlopen ORDER BY Naam |
Ik had de 2e parameter bij ROUND gemist in mijn zoektocht, bedankt!quote:Op dinsdag 10 januari 2012 08:54 schreef Scorpie het volgende:
round gebruiken.
http://www.w3schools.com/sql/sql_func_round.asp
Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt.quote:Op dinsdag 10 januari 2012 09:39 schreef Swetsenegger het volgende:
Ja de op functie ken ik, maar in dit geval was het makkelijker in mysql.
Geloof me, m'n server krijgt het er echt niet warm vanquote:Op dinsdag 10 januari 2012 10:41 schreef Pakspul het volgende:
[..]
Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt.
Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen Je kunt het je beter direct goed aanlerenquote:Op dinsdag 10 januari 2012 10:43 schreef Swetsenegger het volgende:
[..]
Geloof me, m'n server krijgt het er echt niet warm van
Het is niet fout om je query zo te formuleren dat de data die eruit komt zo nuttig mogelijk is in je applicatie.quote:Op dinsdag 10 januari 2012 10:49 schreef Pakspul het volgende:
[..]
Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen Je kunt het je beter direct goed aanleren
Swets is al een paar stapjes verder dan aanlerenquote:Op dinsdag 10 januari 2012 10:49 schreef Pakspul het volgende:
[..]
Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen Je kunt het je beter direct goed aanleren
Het is niet fout, maar kwa belasting wil je het gewoon niet. Bij hobby projecten maakt het uiteraard niets uit waar je het doet en als die het makkelijkste voor je is dan moet je het vooral doen. Maar als je grote projecten draait dan kunnen dit wel winst punten zijn.quote:Op dinsdag 10 januari 2012 10:50 schreef Tijn het volgende:
[..]
Het is niet fout om je query zo te formuleren dat de data die eruit komt zo nuttig mogelijk is in je applicatie.
Dat dus.quote:Op dinsdag 10 januari 2012 10:51 schreef GI het volgende:
[..]
Swets is al een paar stapjes verder dan aanleren
En ik ben het met Tijn eens. Het is niet per definitie fout om de DB server te laten rekenen.
Definieer 'belasting'.quote:Op dinsdag 10 januari 2012 10:54 schreef Pakspul het volgende:
[..]
Het is niet fout, maar kwa belasting wil je het gewoon niet. Bij hobby projecten maakt het uiteraard niets uit waar je het doet en als die het makkelijkste voor je is dan moet je het vooral doen. Maar als je grote projecten draait dan kunnen dit wel winst punten zijn.
Zelfde als in hobby projecten kun je best: SELECT * doen, maar het is beter om alleen de velden op te halen die nodig zijn.
Als je round door je db-clients wilt laten uitrekenen, ben je verkeerd bezig.quote:Op dinsdag 10 januari 2012 10:41 schreef Pakspul het volgende:
[..]
Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt.
Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt.quote:Op dinsdag 10 januari 2012 10:54 schreef Pakspul het volgende:
[..]
Het is niet fout, maar kwa belasting wil je het gewoon niet.
quote:Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:
[..]
Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt.
Indeed.quote:Op dinsdag 10 januari 2012 10:57 schreef GlowMouse het volgende:
[..]
Als je round door je db-clients wilt laten uitrekenen, ben je verkeerd bezig.
Ja, dat is wel waar. Maar het hangt compleet van de situatie af of je dergelijke dingen laat berekenen door de DBengine of door de applicatie zelf. Als het puur en alleen om weergave gaat zou ik zeggen dat het door de applicatie gedaan moet worden. Als het om tussentabellen gaat of iets in die geest dan kan ik me nog voorstellen dat je het de DBengine laat doen.quote:Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:
[..]
Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt.
Das knap, het eens zijn met twee quotes die elkaar tegenspreken.quote:
Nee?quote:Op dinsdag 10 januari 2012 11:04 schreef GI het volgende:
[..]
Das knap, het eens zijn met twee quotes die elkaar tegenspreken.
Het is rekenkracht wat je kwijt bent, bij 10 request per minuut maakt het geen fuck uit, maar als je request omhoog gaan dan wil je niet dat je DB server met dit soort dingen bezig is.quote:
Dat probeer ik hier te zeggen.quote:Op dinsdag 10 januari 2012 10:57 schreef GlowMouse het volgende:
[..]
Als je round door je db-clients wilt laten uitrekenen, ben je verkeerd bezig.
ja, want deze eerste zegt. Leg het neer bij de DB en de andere zegt doe het niet want dan ben je verkeerd bezig.quote:
Je begrijpt het verschil tussen server en client?quote:Op dinsdag 10 januari 2012 11:07 schreef Pakspul het volgende:
[..]
ja, want deze eerste zegt. Leg het neer bij de DB en de andere zegt doe het niet want dan ben je verkeerd bezig.
Dat is niet altijd een criterium omdat je vaak eenvoudig servers waar de applicatie op draaien kunt bijplaatsen.quote:Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:
[..]
Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt.
Geef me maar root-toegang op een server die 50.000 queries per seconde afhandelt, zal ik je 10 dingen aanwijzen die elk een miljoen keer meer opleveren.quote:Op dinsdag 10 januari 2012 11:06 schreef Pakspul het volgende:
[..]
Het is rekenkracht wat je kwijt bent, bij 10 request per minuut maakt het geen fuck uit, maar als je request omhoog gaan dan wil je niet dat je DB server met dit soort dingen bezig is.
Niet waar, jij wilt het van je db-server naar je db-client verplaatsen.quote:Dat probeer ik hier te zeggen.
Dat denk ik ook. Het is ook duidelijk dat je moet proberen een trage query te voorkomen natuurlijk. Maar dat doe je niet door de round-functie van je database te vermijden.quote:Op dinsdag 10 januari 2012 11:14 schreef GI het volgende:
Ah, dan las ik het verkeerd. Ik denk trouwens wel dat er geen gouden regel is voor deze problematiek.
Ik weet niet wat jij bedoelt met DB-server en DB-client.quote:Op dinsdag 10 januari 2012 11:08 schreef Tijn het volgende:
[..]
Je begrijpt het verschil tussen server en client?
De machine waar de database zelf op staat is de databaseserver. De machine waar de applicatie op draait die met de database verbinding heeft is de databaseclient.quote:Op dinsdag 10 januari 2012 11:26 schreef Pakspul het volgende:
[..]
Ik weet niet wat jij bedoelt met DB-server en DB-client.
100x zegt niks. Doe hem eens 100.000 keer.quote:Op dinsdag 10 januari 2012 11:26 schreef Pakspul het volgende:
[..]
Ik weet niet wat jij bedoelt met DB-server en DB-client.
Maar ik heb even een test uitgevoerd. 100 x een query opgehaald waar 2x50 float in voorkomen. In de ene heb ik hem door PHP laten afronden en in de andere heb ik het door MySQL laten doen. En het verschil is dat PHP er 35% langer over doet wanneer deze zelf de getallen nog moet afronden.
Dan had Tijn het dus toch goed dat de DB-server zelf efficiënter zijn data kan manipuleren.
Nouja, daar zat ik er dus naast ik dacht altijd dat je zulke functie niet daar moest uitvoeren. Vraag ik mij nu alleen af of dit ook geldt voor berekeningen. Straks maar eens doen eerst koffie!
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |