Database SORT Functie..
Ik heb een klein probleempje met de SQL Sort Functie..
Ik heb de volgende kolom genaamd " naam". Als ik deze doormidel van SORT sorteer krijg ik het volgende..
Sander
Sietske
Trynke
linda
nico
De namen met aan het begin een hoofdletter sorteerd hij apart van de namen die beginnen met een kleine letter..
Wat kan ik hier aan doen, het veld type dat ik heb gebruikt is " Varchar" ..
Ik heb de volgende kolom genaamd " naam". Als ik deze doormidel van SORT sorteer krijg ik het volgende..
Sander
Sietske
Trynke
linda
nico
De namen met aan het begin een hoofdletter sorteerd hij apart van de namen die beginnen met een kleine letter..
Wat kan ik hier aan doen, het veld type dat ik heb gebruikt is " Varchar" ..
Gesponsorde koppelingen:
Wat is er mis met: ORDER BY naam ASC ?
Naja, normalitair komt letter l voor de s.
Maar dat doet hij nie.. :S
Maar dat doet hij nie.. :S
ACS?? waar staat dat voor btw??
ASC staat voor Ascending -> oplopend, dus van laag naar hoog (a -> z)
De andere is DESC, Descending -> aflopend dus van hoog naar laag (z -> a)
De andere is DESC, Descending -> aflopend dus van hoog naar laag (z -> a)
Hoe ziet de query er uit en waarom heb je daar SORT in staan?
in de database staat dus een kollom "naam" en hij zou gebruikt moeten maken van de sort functie om de namen in alfabetische volgorde te zetten..
Nu is het geval dat hij de namen met hoofdletter en namen met kleine lettervoorop apart ordert.
Anne
Bergsma
anne
bergsma
Zoals bovenstaand..
Terwijl het:
Anne
anne
Bergsma
bergsma
eigelijk moet zijn..
Nu is het geval dat hij de namen met hoofdletter en namen met kleine lettervoorop apart ordert.
Anne
Bergsma
anne
bergsma
Zoals bovenstaand..
Terwijl het:
Anne
anne
Bergsma
bergsma
eigelijk moet zijn..
Gewijzigd op 01/01/1970 01:00:00 door SaTZzz T.
Frank:
Ik herhaal de vraag nog maar eens een keertje...Hoe ziet de query er uit en waarom heb je daar SORT in staan?
De verklaring is heel simpel. Er wordt gesorteerd op de ASCII waarden van de characters. Hoofdletter 'A' heeft ASCII waarde 65, 'B' 66, enz. Kleine letter 'a' heeft ASCII waarde 97 en komt dus later dan de 'B'.
Ik zal de oplossing hier maar plaatsen, anders wordt het waarschijnlijk nooit meer wat...
@Frank: Is het zo dat SORT hoofdlettergevoelig is en ORDER BY niet?
SanThe:
Geen idee, ORDER BY is de standaard in SQL om te sorteren. Dat is wat mij betreft dus de enige juiste oplossing. @Frank: Is het zo dat SORT hoofdlettergevoelig is en ORDER BY niet?
SORT heb ik nog nooit gebruikt, laat staan gemist.
als dat allemaal helemaal niet werkt... kan je ook nog xtra kolom maken in je DB, met daarin: klein_naam
als je je query (die de database ingaat) dit er ook nog bijzet:
klein_naam = '".strtolower($naam)."'
en dan sorteren op klein_naam
en output gewoon naam... dan zul je zien dat ie t wel doet
als je je query (die de database ingaat) dit er ook nog bijzet:
klein_naam = '".strtolower($naam)."'
en dan sorteren op klein_naam
en output gewoon naam... dan zul je zien dat ie t wel doet
@Markiej: Wat je nu aandraagt, zijn geen oplossingen maar workarounds die vroeg of laat nog meer problemen opleveren.
ORDER BY is 1 van de eerste SQL-statements die er is en werkt al sinds jaar en dag uitstekend. En data dubbel opslaan, is zo'n beetje de grootste fout die je kunt maken. Het is vragen om een corrupte database.
ORDER BY is 1 van de eerste SQL-statements die er is en werkt al sinds jaar en dag uitstekend. En data dubbel opslaan, is zo'n beetje de grootste fout die je kunt maken. Het is vragen om een corrupte database.
tja, daar heb je natuurlijk ook weer gelijk in.......
Ik had al ORDER By.. (dus geen SORT, waar ik dat dan ook maar weggehaald hebt..). Ik heb nu ASC er achter geplaatst maar het probleem blijft.
Dus onderstaand een stukje van het script..
Vervolgens met while-lus op scherm getoond..
Ik dacht net, als hij nou automatische van de eerste letter een hoofdletter maakt is het ook opgelost. Ik zou alleen niet weten hoe ik dat moet doen..
Dus onderstaand een stukje van het script..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php session_start();
if (isset($_SESSION["naam"])){
include("includes/inc.connect_mysql.php");
//Als $_GET leeg is, variabelen vullen met standaard waarden..
if(!empty ($_GET)){
$status = $_GET["status"];
$order = $_GET["order"];
}else{
$status = "aanwezig";
$order = "naam";
}
//Voor link knop, tegengestelde waarden..
if($status == "aanwezig"){
$status_link = "afwezig";
}else{
$status_link = "aanwezig";
}
//SQL Variabele & Mysql Resultaten ophalen..
$SQL = "SELECT * FROM overzicht WHERE status LIKE '%" . $status . "%' ORDER by $order ASC";
$resultaat = mysql_query($SQL);
//Aantal rows in database tellen..
$num_rows = mysql_num_rows($resultaat);
//Zodra het aantal groter is dan 0 aantal waarden als getal tonen..
if($num_rows > 0){
$bericht = "Aantal " . $status . "en bekend: " . $num_rows . "<br>";
//Zodra het aantal 0 waarden is een fout melding tonen..
}else{
$bericht = "Reeds geen " . $status . "en bekend..";
}
?>
if (isset($_SESSION["naam"])){
include("includes/inc.connect_mysql.php");
//Als $_GET leeg is, variabelen vullen met standaard waarden..
if(!empty ($_GET)){
$status = $_GET["status"];
$order = $_GET["order"];
}else{
$status = "aanwezig";
$order = "naam";
}
//Voor link knop, tegengestelde waarden..
if($status == "aanwezig"){
$status_link = "afwezig";
}else{
$status_link = "aanwezig";
}
//SQL Variabele & Mysql Resultaten ophalen..
$SQL = "SELECT * FROM overzicht WHERE status LIKE '%" . $status . "%' ORDER by $order ASC";
$resultaat = mysql_query($SQL);
//Aantal rows in database tellen..
$num_rows = mysql_num_rows($resultaat);
//Zodra het aantal groter is dan 0 aantal waarden als getal tonen..
if($num_rows > 0){
$bericht = "Aantal " . $status . "en bekend: " . $num_rows . "<br>";
//Zodra het aantal 0 waarden is een fout melding tonen..
}else{
$bericht = "Reeds geen " . $status . "en bekend..";
}
?>
Vervolgens met while-lus op scherm getoond..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
while ($rij = mysql_fetch_array($resultaat)){
echo("<tr>");
echo("<td width=\"4\"></td>");
echo("<td class=\"main_tekst\">" . $rij["naam"]);
if (isset($rij["partner"])){
echo (" <i>" . $rij["partner"] . "</i>");
}
echo("</td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["leeftijd"] . "</div></td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["toestemming"] . "</div></td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["betaald"] . "</div></td><tr>");
}
echo (' <tr>
<td class=\"main_tekst\" width=\"4\"></td>
<td class=\"main_tekst\">');
//Zodra het aantal groter is dan 0 aantal waarden als getal tonen..
if($num_rows > 0){
echo ("<b><div align=\"left\" class=\"main_tekst\"><br>" . $bericht);
//Zodra het aantal 0 waarden is een fout melding tonen..
}else{
echo ("<b><div align=\"left\" class=\"main_tekst\">" . $bericht . "</div>") ;
}
echo ('</td>
</tr>');
echo ("</table>");
?>
while ($rij = mysql_fetch_array($resultaat)){
echo("<tr>");
echo("<td width=\"4\"></td>");
echo("<td class=\"main_tekst\">" . $rij["naam"]);
if (isset($rij["partner"])){
echo (" <i>" . $rij["partner"] . "</i>");
}
echo("</td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["leeftijd"] . "</div></td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["toestemming"] . "</div></td>
<td class=\"main_tekst\"><div align=\"center\">" . $rij["betaald"] . "</div></td><tr>");
}
echo (' <tr>
<td class=\"main_tekst\" width=\"4\"></td>
<td class=\"main_tekst\">');
//Zodra het aantal groter is dan 0 aantal waarden als getal tonen..
if($num_rows > 0){
echo ("<b><div align=\"left\" class=\"main_tekst\"><br>" . $bericht);
//Zodra het aantal 0 waarden is een fout melding tonen..
}else{
echo ("<b><div align=\"left\" class=\"main_tekst\">" . $bericht . "</div>") ;
}
echo ('</td>
</tr>');
echo ("</table>");
?>
Ik dacht net, als hij nou automatische van de eerste letter een hoofdletter maakt is het ook opgelost. Ik zou alleen niet weten hoe ik dat moet doen..
Gewijzigd op 01/01/1970 01:00:00 door SaTZzz T.
Jij wilt dus zeggen dat de query 'SELECT * FROM overzicht ORDER BY naam ASC' niet het gewenste resultaat oplevert? Heb je dit al in PHPmyAdmin geprobeerd?
Ik kan me hier echt niets bij voorstellen, nog nooit problemen mee gehad. Maar goed, voor alles is een eerste keer...
Ik kan me hier echt niets bij voorstellen, nog nooit problemen mee gehad. Maar goed, voor alles is een eerste keer...
Mijn exuus..
Alles werkt inmiddels :S
Erg vreemd, nu doet hij het wel goed en zonet nog nie.. Maarjah :S
Bedankt, ben weer veel teweten gekomen ;)
Alles werkt inmiddels :S
Erg vreemd, nu doet hij het wel goed en zonet nog nie.. Maarjah :S
Bedankt, ben weer veel teweten gekomen ;)
Offtopic:
@Markiej:
Behalve wat Frank al zegt dat er redundantie ontstaat door een klein_naam toe te voegen en het heel lelijk is, is het ook nog eens een onhandige workaround. Als je het dan zo wil doen gebruik dan de SQL functie LOWER.
Maar het probleem van TS is al op mysterieuze wijze opgelost ineens :)
@Markiej:
Behalve wat Frank al zegt dat er redundantie ontstaat door een klein_naam toe te voegen en het heel lelijk is, is het ook nog eens een onhandige workaround. Als je het dan zo wil doen gebruik dan de SQL functie LOWER.
Maar het probleem van TS is al op mysterieuze wijze opgelost ineens :)
en als een mysql hoofdletters voor kleine letters zet doe je toch gewoon:
SELECT LOWER(naam) AS kleinenaam, naam , voorletter enz
FROM
joutabel
ORDER BY kleinenaam ASC
edit topic hierboven over het hoofd gezien. Nou ja nu staat de syntax er ook nog
SELECT LOWER(naam) AS kleinenaam, naam , voorletter enz
FROM
joutabel
ORDER BY kleinenaam ASC
edit topic hierboven over het hoofd gezien. Nou ja nu staat de syntax er ook nog
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
gmta (H)



