Tri sur un select

Fermé
t671 Messages postés 1429 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 27 septembre 2024 - Modifié par t671 le 29/08/2013 à 10:53
 t671 - 1 sept. 2013 à 11:11
Bonjour,

Je fais déjà un tri dans un select. Notamment pour avoir dans l'ordre une liste d'individus en fonction de leur nom, prénom et date de naissance :
$query = 'SELECT id,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE famille LIKE "%XXXX%" ORDER BY nom, prenom, (SUBSTRING(date_naissance, -4))'; 

Le problème, c'est que s'il y a deux, trois ou quatre prénoms, le tri ne se fait que sur le premier.
Comment faire pour avoir également le tri sur tous les prénoms de l'individu ?
Merci.

11 réponses

djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
31 août 2013 à 05:13
Peux tu mettre un exemple un peu plus détaillé?

Ce que tu as en entrée, ce que tu attends en sortie?
0
J'ai un champs "prenom". Il peut contenir 1,2,3,4, ...... prénoms séparés par un espace (FRANCOIS MICHEL MAURICE).
Mon SELECT ci-dessus fait le tri, mais que sur le premier prénom. Par exemple, je peux très bien avoir "FRANCOIS MICHEL MAURICE" avant "FRANCOIS AUGUSTE".
En fait, j'ai l'impression que le tri s'arrête après le premier prénom, et ne continue pas après l'espace ................
Comment faire pour continuer le tri sur les caractères après l'espace ?
0
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
31 août 2013 à 16:41
Tu as quoi apres ta $query ? Vu que ta query n'a pas de LIMIT , cela devrait continuer en effet.


0
Voilà :
$query = 'SELECT ................
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) 
{
......................
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
31 août 2013 à 17:51
Juste en faisant:

'SELECT id,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE famille LIKE "%XXXX%"';

Ca donne quoi comme résultats?
0
A l'affichage, le tri reste sur le nom, mais les prénoms s'affichent dans le désordre pour le même nom !
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
31 août 2013 à 18:46
Bonjour,

J'ai une base généalogique avec des enregistrements comprenant des champs noms (un seul nom pour un même enregistrement) et prénoms (prénoms multiples possibles, séparés par des espaces pour un même enregistrement) et je n'ai pas ce type de problème en utilisant ta requête après avoir adapté les noms de champ. Mais je ne comprends pas bien la différence que tu fais dans les champs 'famille' et 'nom' et ce que tu y inscris dans ces champs là ?

Peux-tu montrer le contenu de deux ou trois enregistrements, juste pour voir (et peut-être trouver où ça coince ?
0
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
31 août 2013 à 19:15
t671 en effet donne nous plus d'élements, on peut pas deviner ce que tu as sous les yeux...

Voici un exemple de mes tests:

CREATE TABLE 'test' (
'id' INT(10) NOT NULL AUTO_INCREMENT,
'prenom' VARCHAR(1000) NOT NULL,
'famille' VARCHAR(1000) NOT NULL,
PRIMARY KEY ('id')
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

INSERT INTO 'test' ('id', 'prenom', 'famille') VALUES (1, 'FRANCOIS AUGUSTE', 'PIGNON');
INSERT INTO 'test' ('id', 'prenom', 'famille') VALUES (2, 'FRANCOIS ZEN', 'PIGNON');
INSERT INTO 'test' ('id', 'prenom', 'famille') VALUES (3, 'FRANCOIS ISIDORE ROMEO', 'PIGNON');
INSERT INTO 'test' ('id', 'prenom', 'famille') VALUES (4, 'FRANCOIS MICKAEL', 'PIGNON');


SELECT * FROM test WHERE famille LIKE "%PIGNON%"

SELECT * FROM test WHERE famille LIKE "%PIGNON%" ORDER BY prenom

On a bien les resultats dans ma deuxieme query qui retourne par ordre alphabetique le champs entier.
0
Sur mon site, j'ai un onglet "branche paternelle", un onglet "branche maternelle' et la branche paternelle de mon épose.
Le champs "famille" permet de distinguer de quelle branche est issue l'individu.
Et dans une famille, il y a plusieurs types de noms !

En plus, quand je modifie les champs d'1 individu par menu interposé, le script de mise à jour m'ajoute des espaces entre les prénoms. C'est peut-être là d'où vient l'arreur .....

$prenom = $_POST["prenom"];
//**** Récupération et formatage des prénoms *******
$prenom = strtolower($prenom);  //met tout en minuscule
$a = explode(' ',$prenom);  //$a comprend tous les prénoms séparés par un espace 
$pre = array();     //$pre est un tableau comprenant tous les prénoms
foreach($a as $b){ 
$c = explode('-', $b);    
$f = ' '; 
foreach($c as $e => $d){ 
if($e>0){ 
$f .= '-'; 
} 
$f .= UcFirst($d); 
} 
$pre[] = $f; 
} 
$prenoms = ''; 
foreach($pre as $p){ 
$prenoms .= ' '.$p;  
} 
$prenoms = substr($prenoms, 2); //supprime l'espace en début de chaîne
//**** fin formatage des prénoms *****

Ainsi, les prénoms peuvent être saisi en minuscule ou majuscule, ils seront enregistré avec la première lettre en majuscule, et ceci pour tous les prénoms .......
A chaque modification, des espaces sont ajoutés entre les prénoms pour le nom !

Il faudrait que je teste si le prénom a été modifié ou pas, je fais la partie "formatage des prénomsé".
0
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
31 août 2013 à 20:07
Je laisse tomber...
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
1 sept. 2013 à 00:15
Si tu cherches quelque chose dans le genre de http://www.fauque.fr/demogen/
tu peux récupérer les scripts en https://www.phpclasses.org/package/7009-PHP-Manage-genealogy-trees-for-a-family.html
0
J'ai trouvé ! En utilisant la fonction $prenoms = ucwords($prenom); à la place du pavé noté ci-dessus, j'arrive presqu'à mes fin.
C'est à dire que je mets toutes les premières lettres desprénoms en majuscule sans toucher au espace ezntre les prénoms (ce qui me causait le problème initial).
Par contre, si j'ai un nom composé (marie-françoise), comment mettre françoise avec une majuscule ?
0