par
Kaoteknik » 17 nov. 2007, 17:42
Bien, pour le test j'ai créé une table toute simple :
Code : Tout sélectionner
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`nom` varchar(40) NOT NULL,
`info` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `test` (`id`, `nom`, `info`) VALUES (1, 'George', 'francais'),
(2, 'Marie', 'espagnole'),
(3, 'Pierre', 'allemand'),
(4, 'Roger', 'italien'),
(5, 'Claude', ''),
(6, '', 'anglais');
J'ai ensuite testé plusieurs requêtes différentes, sans résultat satisfaisant !
Première, deuxième et troisième requêtes :
$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC";
$requete = "SELECT nom, info FROM test ORDER BY nom IS NOT NULL";
$requete = "SELECT nom, info FROM test ORDER BY nom IS NOT NULL ASC";
Retournent :
George | francais
Marie | espagnole
Pierre | allemand
Roger | italien
Claude | NULL
NULL | anglais
Les noms ayant une valeur NULL sont bien affichés en dernier, mais ceux étant NOT NULL ne sont pas triés par ordre alphabétique.
Quatrième, cinquième, sixième et septième requête :
$requete = "SELECT nom, info FROM test ORDER BY nom ASC";
$requete = "SELECT nom, info FROM test ORDER BY (nom IS NULL) ASC, nom ASC";
$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC, nom ASC";
$requete = "SELECT nom, info FROM test ORDER BY nom ASC, info";
Retournent :
NULL | anglais
Claude | NULL
George | francais
Marie | espagnole
Pierre | allemand
Roger | italien
Cette fois les noms sont bien triés par ordre alphabétique, mais les noms NULL apparaîssent en haut de tableau.
Huitième requête :
$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC, info";
Retourne :
Claude | NULL
Pierre | allemand
NULL | anglais
Marie | espagnole
George | francais
Roger | italien
Avec cette requête l'ordre est d'abord effectué sur le noms NOT NULL, puis retrié à partir des infos, ce qui ne permet toujours pas d'avoir le résultat souhaité.
C'est à en perdre son latin !
Bien, pour le test j'ai créé une table toute simple :
[code]CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`nom` varchar(40) NOT NULL,
`info` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `test` (`id`, `nom`, `info`) VALUES (1, 'George', 'francais'),
(2, 'Marie', 'espagnole'),
(3, 'Pierre', 'allemand'),
(4, 'Roger', 'italien'),
(5, 'Claude', ''),
(6, '', 'anglais');
[/code]
J'ai ensuite testé plusieurs requêtes différentes, sans résultat satisfaisant ! :(
Première, deuxième et troisième requêtes :
[php]$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC";[/php]
[php]$requete = "SELECT nom, info FROM test ORDER BY nom IS NOT NULL";[/php]
[php]$requete = "SELECT nom, info FROM test ORDER BY nom IS NOT NULL ASC";[/php]
Retournent :
[quote]
George | francais
Marie | espagnole
Pierre | allemand
Roger | italien
Claude | NULL
NULL | anglais[/quote]
Les noms ayant une valeur NULL sont bien affichés en dernier, mais ceux étant NOT NULL ne sont pas triés par ordre alphabétique.
Quatrième, cinquième, sixième et septième requête :
[php]$requete = "SELECT nom, info FROM test ORDER BY nom ASC";[/php]
[php]$requete = "SELECT nom, info FROM test ORDER BY (nom IS NULL) ASC, nom ASC";[/php]
[php]$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC, nom ASC";[/php]
[php]$requete = "SELECT nom, info FROM test ORDER BY nom ASC, info";[/php]
Retournent :
[quote]NULL | anglais
Claude | NULL
George | francais
Marie | espagnole
Pierre | allemand
Roger | italien[/quote]
Cette fois les noms sont bien triés par ordre alphabétique, mais les noms NULL apparaîssent en haut de tableau.
Huitième requête :
[php]$requete = "SELECT nom, info FROM test ORDER BY (nom IS NOT NULL) ASC, info";[/php]
Retourne :
[quote]Claude | NULL
Pierre | allemand
NULL | anglais
Marie | espagnole
George | francais
Roger | italien[/quote]
Avec cette requête l'ordre est d'abord effectué sur le noms NOT NULL, puis retrié à partir des infos, ce qui ne permet toujours pas d'avoir le résultat souhaité.
C'est à en perdre son latin !