Gebruik van de functie ASC

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paultjeh

Paultjeh

04/09/2006 19:13:00
Quote Anchor link
Voor de website van een plaatselijke dartvereniging heb ik een script in elkaar gezet voor een overzicht van de ranking. Echter spuugt php het niet helemaal uit zoals ik wil.
In eerste instantie moet alles gesorteerd worden op het aantal 180-ers, dit gaat goed. Indien het aantal 180-ers evenveel is wil ik dat php kijkt naar de naam, zodat hij daar verder op kan sorteren (a-z). Hier maak ik gebruik van ASC. Nu spuugt hij het in eerst instantie goed uit, echter bijna aan het eind gaat hij na de Z weer verder met enkele namen. Wat doe ik hier verkeerd?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$query
=
"SELECT rankid, naam, puntenl, puntent, hf, h80 FROM ranking
ORDER BY hf DESC, naam ASC "
;
$result = mysql_query($query) or die (mysql_error());
?>


Voorbeeld: http://www.schuttersdarts.net/rankingh80.php

Zoals je kunt zien gaat het tot en met 27 goed, daarna is het mis.
Iemand enig idee waar dit aan zou kunnen liggen?

Bij voorbaat dank voor je reactie :)
 
PHP hulp

PHP hulp

12/01/2025 14:09:43
 
Frank -

Frank -

04/09/2006 19:18:00
Quote Anchor link
Het lijkt op een probleem met de verschillende datatypes, althans, dit wil nog wel eens dit soort problemen opleveren.

Dus: Kun je aangeven hoe de tabel er uit ziet en welke datatypes je hebt gebruikt?

Offtopic: 'puntenl, puntent' lijkt mij een verkeerd datamodel. Een totaal sla je namelijk niet (of vrijwel nooit) op in de database. Een totaal bereken je wanneer je deze nodig hebt. De punten die je per leg behaalt, sla je op in een aparte tabel.
 
Paultjeh

Paultjeh

04/09/2006 20:09:00
Quote Anchor link
Bij deze mijn tabel:

CREATE TABLE `ranking` (
`rankid` int(10) NOT NULL auto_increment,
`naam` varchar(100) NOT NULL default '',
`puntenl` varchar(50) NOT NULL default '',
`puntent` varchar(50) NOT NULL default '',
`hf` varchar(50) NOT NULL default '',
`h80` varchar(50) NOT NULL default '',
PRIMARY KEY (`rankid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;

Vrijwel overal varchar, heb wel topics gezien waar gebruik gemaakt werd van INT, echter geeft dit probleem bij de kolom "naam"...

Offtopic answer:
Ikzelf ben een amateur op het gebied van php met als gevolg dat ik (helaas) niks laat uitrekenen maar zelf de behaalde punten invoer en dus voor de invoer nog optel, waarom moeilijk als het makkelijk kan hé ...
 
Frank -

Frank -

04/09/2006 20:15:00
Quote Anchor link
Jouw probleem wordt veroorzaakt door het gebruik van het verkeerde datatype. De waarde 100 komt bijvoorbeeld voor de waarde 2. Dit omdat je eerst 1 krijgt en dan pas 2... Er wordt alphabetisch gesorteerd en niet nummeriek.

naam => tekst van variabele lengte => VARCHAR of TEXT (in dit geval een VARCHAR)
punten => geheel getal => INTEGER, geen andere keuze mogelijk.

Zie verder de handleiding voor de overige datatypes.

Offtopic: Ga je eens verdiepen in SQL:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT 1 + 2 AS totaal

Resultaat:
3
De database kan beter rekenen dan dat jij dat kunt... ;)
 
Paultjeh

Paultjeh

04/09/2006 20:49:00
Quote Anchor link
Bovenstaand was me reeds bekend, echter was dit (op dit moment) nog niet het probleem. Zoals je in de tabel kon zien heb ik de kolom "naam" het type varchar meegegeven. In de query heb ik aangegeven dat dit alfabetisch georderd dient te worden (ASC), echter dit doet hij maar gedeeltelijk, dus tot en met persoon nr 27 en in mijn ogen staan de punten hier momenteel nog los van? Dit omdat ik in phpmyadmin de query "SELECT naam FROM ranking order by naam ASC" meegeef wat ook een negatief resultaat geeft.
Bovenstaande reactie lost dit probleem niet op, of ik zie uiteraard iets over het hoofd :S
 
Frank -

Frank -

04/09/2006 20:55:00
Quote Anchor link
punten => geheel getal => INTEGER, geen andere keuze mogelijk.

De kolommen waar jij punten in wegschrijft, MOETEN van het type INT zijn (of evt. een ander nummeriek type). Doe je dat niet, krijg je problemen zodra je gaat sorteren op het aantal punten. En jij gebruikt een VARCHAR, dus heb je de genoemde problemen.

Oplossing: Datatype aanpassen.

Sorteren op uitsluitend (!) de naam zal het probleem niet zijn.
 
Robert Deiman

Robert Deiman

04/09/2006 21:17:00
Quote Anchor link
@Frank

Een quote van Paultjeh:
"Dit omdat ik in phpmyadmin de query "SELECT naam FROM ranking order by naam ASC" meegeef wat ook een negatief resultaat geeft."

Dus ook als die niet op aantal sorteert werkt het niet.. Er zal dus wel wat aan de hand zijn.
 
Paultjeh

Paultjeh

04/09/2006 21:19:00
Quote Anchor link
Om te beginnen bedankt voor de snelle reacties!
Toch blijft het bij mij problemen geven, ik heb nu een aparte tabel gemaakt voor in dit geval alleen de naam die ik graag in alfabetische volgorde zie.

CREATE TABLE `naam` (
`id` int(10) NOT NULL auto_increment,
`naam` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;

De query ziet er nu als volgt uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$query
=
"SELECT id, naam
FROM naam
ORDER BY naam ASC "
;
$result = mysql_query($query) or die (mysql_error());
?>


Het resultaat is http://www.schuttersdarts.net/naamtest.php

In het begin loop het netjes van a,b,c,d, enz tot en met persoon nr 27, dan gaat het nog steeds mis.

Voor zover ik nu beredeneer is de tabel in orde en zo ook de query, noch geeft dit het juist resultaat.
Gewijzigd op 01/01/1970 01:00:00 door Paultjeh
 
Frank -

Frank -

04/09/2006 21:22:00
Quote Anchor link
hmmm, met een half oog gelezen.

Toch zou dit wel een heel erg vreemd en uniek probleem zijn wanneer MySQL ineens niet meer in staat is om keurig te sorteren. Al dan niet ASC of DESC.

Gooi de data eens even weg (of beter de hele tabel) en maak de boel opnieuw aan. Ik krijg het idee dat er wat verrotte of ongelukkig gekozen data in de database staat. Denk bijvoorbeeld aan spaties en html-entities.
 
Paultjeh

Paultjeh

04/09/2006 21:38:00
Quote Anchor link
Had reeds een nieuwe tabel aangemaakt, maar de inhoud exporteren en invoegen lost zoiets vanzelfsprekend niet op...

Gevolg:
Na enige filteringen functioneert alles naar wens :)
Nogmaals bedankt voor de snelle respons.

Greetz Paul
 
- SanThe -

- SanThe -

04/09/2006 22:15:00
Quote Anchor link
Heb je soms namen met hoofdletters en namen met kleine letters door elkaar. Een kleine letter komt namelijk na de Z.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.