Je snapt hetquote:Op zondag 8 januari 2012 22:20 schreef cablegunmaster het volgende:
[..]
Dus je wil dat de site tegen je zegt Dit nieuwsartikel of letter A Staat op nummer 2 van de hele lijst. en de rest negeren? Dan zou ik een order by desc. doen en vervolgens het eruit halen met echo. een Getal++; in de for lus doen (of welke lus) en als het overeen komt welke positie het is dus als de id te voorschijn komt die nodig is dan laat je het pas Echo'en welke positie het is.
Voila? of snap ik het verkeerd ?
Dan krijg je als resultaat : A staat op X positie en heeft 4 likes.
Positie moet altijd up-to-date blijven omdat users hem kunnen bepalen (door middel van de likes).quote:Op zondag 8 januari 2012 22:37 schreef GlowMouse het volgende:
Select count(*) op de rijen met meer likes als het aantal rijen klein is, anders denormaliseren en de positie ook in de rij opslaan
1 2 3 4 5 6 7 8 9 10 11 12 | <?php function songRank($songID){ $rank = 0; $getrank = mysql_query("SELECT songID FROM songs ORDER BY `likes` DESC"); while($row = mysql_fetch_array($getrank)){ $rank++; if($songID == $row['songID']){ return $rank; } } } ?> |
Nog nooit gebruik gemaakt van COUNT(*), maar ik zal er eens naar kijken.quote:Op zondag 8 januari 2012 22:48 schreef GlowMouse het volgende:
Dat is een domme query, net alsof je niet snapt wat COUNT(*) en WHERE doen.
quote:Op zondag 8 januari 2012 22:50 schreef dirkjo het volgende:
[..]
Nog nooit gebruik gemaakt van COUNT(*), maar ik zal er eens naar kijken.
1 | SELECT COUNT(*) AS aantal FROM songs WHERE songID = '" . mysql_real_escape_string($songID) . "' ORDER BY `likes` DESC |
songID is nummeriek, maar je query geeft geen positie terug. Ik krijg overal '1' terugquote:Op zondag 8 januari 2012 22:52 schreef The_Terminator het volgende:
[..]
[ code verwijderd ]
Het aantal zit dan in: $row['aantal']
Edit: is songID numeriek of een string?
Oeps... Onderstaande fixt het:quote:Op zondag 8 januari 2012 22:56 schreef dirkjo het volgende:
[..]
songID is nummeriek, maar je query geeft geen positie terug. Ik krijg overal '1' terug
1 | SELECT COUNT(*) AS aantal, songID FROM songs WHERE songID = " . mysql_real_escape_string($songID) . " ORDER BY `likes` DESC |
Nee hoorquote:Op zondag 8 januari 2012 22:58 schreef The_Terminator het volgende:
[..]
Oeps... Onderstaande fixt het:
[ code verwijderd ]
Geen rijen, maar één kolom in een rij. (Ja ik weet; dat heb ik een paar keer verkeerd gezegd zie ik net ).quote:Op zondag 8 januari 2012 23:02 schreef GlowMouse het volgende:
Welke rijen moet je tellen om de rank te bepalen.
Daarom vroeg ik of songid een numerieke waarde zou zijn. Ik gebruikt meestal is_numeric om te bepalen of de ingevoerde waarde ook daadwerkelijk numeriek is en als dat zo is voer ik het aan de query zonder de escape_string functie te gebruiken. En ik heb een vermoeden dat ik in mijn query een group by ben vergetenquote:Op zondag 8 januari 2012 23:04 schreef GlowMouse het volgende:
De oplossing van T_T is alleen daarom al niet goed omdat hij mysql_real_escape_string en intval door elkaar haalt.
Of niet, want je weet toch al dat dat precies één rij is. Je wilt juist tellen hoeveel rijen een hogere score hebben. Je functie zou dus "songRank($likes)" moeten zijn.quote:Op zondag 8 januari 2012 23:06 schreef dirkjo het volgende:
[..]
De kolom 'likes' vertelt me de positie, die kolom bevat een getal. Met COUNT ga je alle rijen tellen die `songID` '$songID' bevatten, ofniet?
Probeer het niet goed te praten . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig.quote:Op zondag 8 januari 2012 23:07 schreef The_Terminator het volgende:
[..]
Daarom vroeg ik of songid een numerieke waarde zou zijn. Ik gebruikt meestal is_numeric om te bepalen of de ingevoerde waarde ook daadwerkelijk numeriek is en als dat zo is voer ik het aan de query zonder de escape_string functie te gebruiken. En ik heb een vermoeden dat ik in mijn query een group by ben vergeten
Maar wat gebeurd er dan als meerdere nummers hetzelfde aantal likes hebben? Dan pakt die de eerste de beste rij die het gegeven aantal likes heeft.quote:Op zondag 8 januari 2012 23:13 schreef GlowMouse het volgende:
[..]
Of niet, want je weet toch al dat dat precies één rij is. Je wilt juist tellen hoeveel rijen een hogere score hebben. Je functie zou dus "songRank($likes)" moeten zijn.
[..]
Probeer het niet goed te praten . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig.
Ik probeer niets goed te praten . Ik ben vergeten die escapefunctie te verwijderen, de quotes had ik wel weggehaald waardoor het lijkt dat ik de functie gebruik in een query zonder quotes.quote:Op zondag 8 januari 2012 23:13 schreef GlowMouse het volgende:
Probeer het niet goed te praten . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig.
Heb je die vraag eens bij je eigen query gesteld?quote:Op zondag 8 januari 2012 23:23 schreef dirkjo het volgende:
[..]
Maar wat gebeurd er dan als meerdere nummers hetzelfde aantal likes hebben? Dan pakt die de eerste de beste rij die het gegeven aantal likes heeft.
Jazeker, maar als ik mijn manier gebruik garandeer ik wel dat de plek die de pagina over het nummer aangeeft gelijk is aan de plek die staat in de pagina waar de complete lijst van alle nummers staat.quote:Op zondag 8 januari 2012 23:25 schreef GlowMouse het volgende:
[..]
Heb je die vraag eens bij je eigen query gesteld?
Ik definieer de plek als 1+[het aantal songs met meer likes]. Het aantal songs met meer likes kun je met één query tellen.
Dat is niet waar, het resultaat berust op toeval.quote:Op zondag 8 januari 2012 23:27 schreef dirkjo het volgende:
[..]
Jazeker, maar als ik mijn manier gebruik garandeer ik wel dat de plek die de pagina over het nummer aangeeft gelijk is aan de plek die staat in de pagina waar de complete lijst van alle nummers staat.
quote:Op zondag 8 januari 2012 23:30 schreef dirkjo het volgende:
En dat zou het niet doen in jouw geval, of valt zoiets niet te vermijden?
quote:Op zondag 8 januari 2012 23:25 schreef GlowMouse het volgende:
[..]
Ik definieer de plek als 1+[het aantal songs met meer likes]. Het aantal songs met meer likes kun je met één query tellen.
Oke, dus (even snel) zou jouw query er ongeveer zo uitzien:quote:
1 2 3 | <?php mysql_query("SELECT COUNT(*) AS rank FROM songs WHERE likes > ". $likes. " "); ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |