sorteren op titel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel Koonen

Michel Koonen

22/01/2017 16:40:07
Quote Anchor link
Ik heb de volgende vraag.

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.
 
PHP hulp

PHP hulp

27/11/2021 00:49:24
 
Johan de wit

johan de wit

22/01/2017 16:41:36
Quote Anchor link
Asc of desc gebruiken
 
Michel Koonen

Michel Koonen

22/01/2017 16:45:49
Quote Anchor link
Ik gebruik al ASC in de query !
 
- Ariën -
Beheerder

- Ariën -

22/01/2017 17:00:59
Quote Anchor link
Ik denk dat een volgnummer-veld zinvoller is.
E01, E02 etc... wat voor episode staat. En als iets met seizoenen is ingedeeld noem je het S01E01.
 
Ozzie PHP

Ozzie PHP

22/01/2017 17:09:39
Quote Anchor link
@johan

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
natsort($result);
?>


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
 
- SanThe -

- SanThe -

22/01/2017 17:53:13
Quote Anchor link
Misschien helpt een extra spatie voor de getallen onder de 10.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/01/2017 13:37:31
Quote Anchor link
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.
 
Ben van Velzen

Ben van Velzen

23/01/2017 14:41:37
Quote Anchor link
Of je gebruikt extra metadata, zoals datum dat een film versche, gecombineerd met een serie/franchise oid. Uiteraard gaat dat met iets als star wars de mist in, afhankelijk van hoe je het bekijkt.
Gewijzigd op 23/01/2017 14:42:07 door Ben van Velzen
 
- Ariën -
Beheerder

- Ariën -

23/01/2017 17:04:45
Quote Anchor link
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.
 
Michel Koonen

Michel Koonen

23/01/2017 17:05:51
Quote Anchor link
Ik zie wel wat in het gebruik van natsort($result); maar hoe pas ik die toe op onderstaande code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$query = "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query)
 
Ozzie PHP

Ozzie PHP

23/01/2017 17:08:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$query
= "SELECT * FROM movies ORDER BY moviename ASC ";
$result = mysql_query($query);
natsort($result);
?>
 
Michel Koonen

Michel Koonen

23/01/2017 17:14:53
Quote Anchor link
@ozzie.. en nu kan ik $result via een while loop gaan uitlezen, omdat de array via natsort 'natuurlijk' is geordend?
Het is dus niet nodig om het volgende te doen: $natsort_result = natsort($result); waarna ik $natsort_result via een while loop doorloop...
 
- Ariën -
Beheerder

- Ariën -

23/01/2017 17:16:33
Quote Anchor link
Je vergeet te fetchen, Ozzie ;-)
Een $result van een mysql(i)_query levert alleen een resource op bij een succes, of een FALSE bij een fout.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
?>
Gewijzigd op 23/01/2017 17:22:23 door - Ariën -
 
Michel Koonen

Michel Koonen

23/01/2017 17:23:57
Quote Anchor link
thks !
 
Adoptive Solution

Adoptive Solution

23/01/2017 19:19:56
Quote Anchor link
Ik weet niet hoe alle titles er uitzien, maar dit geeft een goed resultaat :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 



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.