Tri sur un select

t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
 t671 -
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   Statut Membre Dernière intervention   95
 
Peux tu mettre un exemple un peu plus détaillé?

Ce que tu as en entrée, ce que tu attends en sortie?
0
t671
 
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   Statut Membre Dernière intervention   95
 
Tu as quoi apres ta $query ? Vu que ta query n'a pas de LIMIT , cela devrait continuer en effet.


0
t671
 
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   Statut Membre Dernière intervention   95
 
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
t671
 
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   Statut Membre Dernière intervention   142
 
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   Statut Membre Dernière intervention   95
 
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
t671
 
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   Statut Membre Dernière intervention   95
 
Je laisse tomber...
0
heliconius Messages postés 539 Date d'inscription   Statut Membre Dernière intervention   142
 
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
t671
 
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