sorteren op titel
In een database heb ik de volgende filmtitels staan.
Police Academy 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 en 12.
als ik de quiry alphabetisch orden, dan komt ie met
1,10,11,12,2,3,4,5,6,7,8,9
Hoe kan ik dit voorkomen, cq dit gedrag corrigeren.
Ik kan de titels ook wel veranderen in 01, 01 etc, maar dat vind ik er niet netjes uitzien.
Asc of desc gebruiken
Ik gebruik al ASC in de query !
E01, E02 etc... wat voor episode staat. En als iets met seizoenen is ingedeeld noem je het S01E01.
Dat heeft er niks mee te maken ... hij ordert zo te zien alfabetisch, terwijl in dit geval een natuurlijke sortering gewenst is. Hoe dat in MYSQL werkt, weet ik niet. Ik lees veel oplossingen, maar die schijnen niet echt solide te zijn.
Michel, wellicht kun je de PHP functie natsort gebruiken.
Als het goed is haal je nu gegevens op uit de database en die stop je in een variabele. Vervolgens doe je dan dit:
Die $result is dan wat je uit de database ophaalt (misschien noem jij dat anders).
Laat even weten of het is gelukt.
Gewijzigd op 22/01/2017 17:10:07 door Ozzie PHP
Misschien helpt een extra spatie voor de getallen onder de 10.
De enige correcte oplossing lijkt mij een aanpassing in de structuur van de database waarin in een aparte kolom op een of andere manier een volgnummer/deel wordt opgeslagen (waar je vervolgens op kunt sorteren). Hoe deze wijziging er precies uitziet hangt mede af van de vraagstukken die je de database wilt kunnen stellen.
Gewijzigd op 23/01/2017 14:42:07 door Ben van Velzen
De manier met de notatie van series en episodes, die ik eerder in dit topic aangaf, zorgt ook voor een goede volgorde. Je zou er dan zelfs deze metadata uit kunnen extracten.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$query = "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query);
natsort($result);
?>
$query = "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query);
natsort($result);
?>
Het is dus niet nodig om het volgende te doen: $natsort_result = natsort($result); waarna ik $natsort_result via een while loop doorloop...
Een $result van een mysql(i)_query levert alleen een resource op bij een succes, of een FALSE bij een fout.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query); // gebruik bij voorkeur de mysqli_query functie, omdat deze oude mysql_() functie in PHP 7 ter ziele is.
$items = array(); // array aanmaken.
while($data = mysql_fetch_assoc($result)){
$items[] = $data; // vul de array aan.
}
natsort($items); // we sorteren de $items-array nu met de natsort() functie.
?>
$query = "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query); // gebruik bij voorkeur de mysqli_query functie, omdat deze oude mysql_() functie in PHP 7 ter ziele is.
$items = array(); // array aanmaken.
while($data = mysql_fetch_assoc($result)){
$items[] = $data; // vul de array aan.
}
natsort($items); // we sorteren de $items-array nu met de natsort() functie.
?>
Gewijzigd op 23/01/2017 17:22:23 door - Ariën -
thks !
Code (php)
1
select * , SUBSTRING(moviename,1,6) from movies order by SUBSTRING(moviename,1,6) asc ,length(moviename), moviename;
Gewijzigd op 23/01/2017 19:25:00 door Adoptive Solution