Trier des dates dans l'ordre
t671
Messages postés
1476
Date d'inscription
Statut
Membre
Dernière intervention
-
t671 Messages postés 1476 Date d'inscription Statut Membre Dernière intervention -
t671 Messages postés 1476 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Un enregistrement de ma base (individus), comporte des champs « date_mariage_1, date_mariage_2, date_mariage_3, date_mariage_4 », mais pas forcément dans l'ordre. Et certains peuvent être vides.
Je veux les trier dans l'ordre, sur les 4 derniers caractères de la date qui représente l'année,
Merci de m'aider.
Un enregistrement de ma base (individus), comporte des champs « date_mariage_1, date_mariage_2, date_mariage_3, date_mariage_4 », mais pas forcément dans l'ordre. Et certains peuvent être vides.
Je veux les trier dans l'ordre, sur les 4 derniers caractères de la date qui représente l'année,
$selectA = 'SELECT date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4 FROM individus WHERE date_mariage_1 != "" AND date_mariage_2 != "" AND date_mariage_3 != "" AND date_mariage_4 != "" ORDER BY RIGHT(date_mariage_1,4).......?????';
Merci de m'aider.
A voir également:
- Trier des dates dans l'ordre
- Excel trier par ordre croissant chiffre - Guide
- Nombre de jours entre deux dates excel - Guide
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
- Triez ce tableau par ordre alphabétique des prénoms ✓ - Forum Excel
- Ordre meilleur ami snap - Forum Snapchat
21 réponses
J'ai plusieurs 4 champs « date_mariage_1, date_mariage_2, date_mariage_3, date_mariage_4 ». Je veux les trier et afficher par ordre ASC en sélectionnant les 4 derniers caractères du champs (qui correspond à l'année), tout en excluant les champs vides.
si $date1 = date_mariage_1 = 22 NOV 1866
si $date2 = date_mariage_2 = 01 JAN 1850
si $date3 = date_mariage_3
si $date4 =date_mariage_4 = 26 SEP 1868
l'ordre sera $date2, $date 1, $date4.
je devrait donc afficher ce qui correspond à $date2, puis $date1, puis $date4.
Merci à toi.
si $date1 = date_mariage_1 = 22 NOV 1866
si $date2 = date_mariage_2 = 01 JAN 1850
si $date3 = date_mariage_3
si $date4 =date_mariage_4 = 26 SEP 1868
l'ordre sera $date2, $date 1, $date4.
je devrait donc afficher ce qui correspond à $date2, puis $date1, puis $date4.
Merci à toi.
oui ca j'ai bien compris mais en imaginant que tu es un champ id sur ta table
id 1
DATE 1920
DATE 1940
DATE 1980
id2
DATE 1935
DATE 1950
id 3
...
tu veux ca ?
DATE 1920
DATE 1935
DATE 1940
DATE 1950
DATE 1980
ou ça ?
id 1
DATE 1920
DATE 1940
DATE 1980
id2
DATE 1935
DATE 1950
id 3
...
tu veux ca ?
DATE 1920
DATE 1935
DATE 1940
DATE 1950
DATE 1980
ou ça ?
Pour 1 id = X, j'ai :
date1=1555
date2=1558
date3=
date4=1666
Je veux connaitre l'ordre ASC des dates de l'id X.
Puis, je traite les éléments se référents à date4, puis date1, puis date2.
Où j'en suis :
Là, je récupère mes années. Si une valeur est vide, je lui donne le maximum (9999).
Mais comment savoir l'ordre des valeurs ASC, en sachant que je veux commencer par la plus petite valeur ?
date1=1555
date2=1558
date3=
date4=1666
Je veux connaitre l'ordre ASC des dates de l'id X.
Puis, je traite les éléments se référents à date4, puis date1, puis date2.
Où j'en suis :
$id = $_GET['id']; $selectA = 'SELECT date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4 FROM xxxx WHERE id LIKE "'.$id.'" '; $resultA = mysql_query($selectA,$link) or die ('Erreur : '.mysql_error() ); $rowA = mysql_fetch_array($resultA); if (!empty($rowA['date_mariage_1'])) { $date1 = substr($rowA['date_mariage_1'], -4); } if (empty($rowA['date_mariage_1'])) { $date1 = 9999; } if (!empty($rowA['date_mariage_2'])) { $date2 = substr($rowA['date_mariage_2'], -4); } if (empty($rowA['date_mariage_2'])) { $date2 = 9999; } if (!empty($rowA['date_mariage_3'])) { $date3 = substr($rowA['date_mariage_3'], -4); } if (empty($rowA['date_mariage_3'])) { $date3 = 9999; } if (!empty($rowA['date_mariage_4'])) { $date4 = substr($rowA['date_mariage_4'], -4); } if (empty($rowA['date_mariage_4'])) { $date4 = 9999; }
Là, je récupère mes années. Si une valeur est vide, je lui donne le maximum (9999).
Mais comment savoir l'ordre des valeurs ASC, en sachant que je veux commencer par la plus petite valeur ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
essai ça :
$rowA = mysql_fetch_array($resultA); $a = array($rowA['date_mariage_1'],$rowA['date_mariage_2'],$rowA['date_mariage_3'],$rowA['date_mariage_4']); $b = array(); for($i = 0;$i < 4;$i++) { if(empty($a[$i])) continue; $b[substr($a[$i],-4)] = $a[$i]; } ksort($b) foreach($b as $v) { echo '<p>'.$v.'</p>'; }
Avec, j'ai le message :
Parse error: syntax error, unexpected T_FOREACH
Et pour compliquer les choses, si le plus petit est $rowA['date_mariage_2'], mon premier traitement sera avec "num_cj_2", suivi de "num_cj_1" si c'est l'ordre ASC avec $rowA['date_mariage_1'] ..............
Num_cj, est le numéro de l'individu avec lequel je vais récupérer des informations sur ce dernier.
Parse error: syntax error, unexpected T_FOREACH
Et pour compliquer les choses, si le plus petit est $rowA['date_mariage_2'], mon premier traitement sera avec "num_cj_2", suivi de "num_cj_1" si c'est l'ordre ASC avec $rowA['date_mariage_1'] ..............
Num_cj, est le numéro de l'individu avec lequel je vais récupérer des informations sur ce dernier.
Si $rowA['date_mariage_2'] est le plus petit, je commence mes traitements avec num_cj_2 (champs qui est en rapport avec date_mariage_2).
Si $rowA['date_mariage_1'] est le deuxième dans les plus petit, je continue mes traitements avec num_cj_1.
etc ...............
Comment faire le lien entre les champs date_mariage classés dans l'ordre, et leur correspondant num_cj ?
Si $rowA['date_mariage_1'] est le deuxième dans les plus petit, je continue mes traitements avec num_cj_1.
etc ...............
Comment faire le lien entre les champs date_mariage classés dans l'ordre, et leur correspondant num_cj ?
je pensai t'avoir répondu hier soir mais j'ai encore du cliquer sur créer un nouveau sujet..
il faut revoir ton architecture de db.
crée une table mariage
avec les champs idMembre|date|idConjoint
de cette manière tu pourras récupérer tes données comme ça
SELECT mariage.date,mariage.idConjoint FROM membre,mariage WHERE membre.id = :id && mariage.idMembre = membre.id ORDER BY mariage.date ASC
il faut revoir ton architecture de db.
crée une table mariage
avec les champs idMembre|date|idConjoint
de cette manière tu pourras récupérer tes données comme ça
SELECT mariage.date,mariage.idConjoint FROM membre,mariage WHERE membre.id = :id && mariage.idMembre = membre.id ORDER BY mariage.date ASC
Je ne peux modifier la base actuelle. Je pourrais éventuellement en créer une deuxième en parallèle, identique, uniquement pour ce traitement. Mais est-ce bien valable ? Et cela entrainerait d'autres complications pour les mises à jour.
Par contre, j'ai testé ton script avec le foreach. GENIAL !!!!!
La seule solution que je vois maintenant, c'est de tester si le premier résdultat (première ligne) correspond à date_mariage_1, date_mariage_2, date_mariage_3 ou date_mariage_4.
Mais comment nommes-tu le premier résultat, le deuxième, ....... Je connaissait $var[0], $var[1], ...... Mais là ? A quoi dois-je comparer $rowA['date_mariage_1'], ..... ?
Par contre, j'ai testé ton script avec le foreach. GENIAL !!!!!
La seule solution que je vois maintenant, c'est de tester si le premier résdultat (première ligne) correspond à date_mariage_1, date_mariage_2, date_mariage_3 ou date_mariage_4.
Mais comment nommes-tu le premier résultat, le deuxième, ....... Je connaissait $var[0], $var[1], ...... Mais là ? A quoi dois-je comparer $rowA['date_mariage_1'], ..... ?
$rowA = mysql_fetch_array($resultA); $a = array(); for($i = 1,isset($rowA['date_mariage_'.$i]),$i++) $a[] = array($rowA['date_mariage_'.$i],$rowA['num_cj_'.$i]); $b = array(); for($i = 0;isset($a[$i]);$i++) { if(empty($a[$i][0])) continue; $b[substr($a[$i][0],-4)] = $a[$i]; } unset($a); ksort($b); foreach($b as $v) { echo '<p>date :'.$v[0].' conjoint : '.$v[1].'</p>'; }
J'ai l'erreur Parse error: syntax error, unexpected ',' pour la ligne for($i = ........., et je ne sais pas quoi faire.
J'ai déjà entouré la ligne de ( => for(($i = 1,isset.........'num_cj_'.$i]));
J'ai déjà entouré la ligne de ( => for(($i = 1,isset.........'num_cj_'.$i]));
Effectivement, cela fonctionne un peu mieux ainsi !
Mais j'ai comme résultat, mes 3 lignes, pour trois mariages :
date :4 FEB 1686 conjoint :
Le numéro du conjoint n'apparait pas. Pourtant il est bien défini dans le script comme num_cj_xx.
Et comment reconnaitre le 1° cjt au 2° ? En faisant quel test ?
Mais j'ai comme résultat, mes 3 lignes, pour trois mariages :
date :4 FEB 1686 conjoint :
Le numéro du conjoint n'apparait pas. Pourtant il est bien défini dans le script comme num_cj_xx.
Et comment reconnaitre le 1° cjt au 2° ? En faisant quel test ?
$rowA = mysql_fetch_array($resultA); $a = array(); for($i = 1,isset($rowA['date_mariage_'.$i]),$i++) $a[] = array($rowA['date_mariage_'.$i],$rowA['num_cj_'.$i]); $b = array(); for($i = 0;isset($a[$i]);$i++) { if(empty($a[$i][0]) || empty($a[$i][1])) continue; $b[substr($a[$i][0],-4)] = $a[$i]; } unset($a); ksort($b); foreach($b as $v) { echo '<p>date :'.$v[0].' conjoint : '.$v[1].'</p>'; }
Le résultat est très bien. Pour un id, j'ai autant de ligne que de mariage avec date et conjoint associé. Et classé dans l'ordre ASC !!!! Merciiiiiiiiiiii ;o)
Maintenant, je veux utiliser le premier conjoint (s'il existe) pour faire un traitement. Ensuite, j'utiliserais le 2°, s'il existe, ......
Comment repérer le premier, deuxième, troisième et quatrième conjoint dans ton script pour tester s'ils existent ?
Pour le contenu de $rowA :
Maintenant, je veux utiliser le premier conjoint (s'il existe) pour faire un traitement. Ensuite, j'utiliserais le 2°, s'il existe, ......
Comment repérer le premier, deuxième, troisième et quatrième conjoint dans ton script pour tester s'ils existent ?
Pour le contenu de $rowA :
$selectA = 'SELECT date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4, num_cj_1, num_cj_2, num_cj_3, num_cj_4 FROM ville_bis WHERE id LIKE "'.$id.'" ';
J'ai 46000 individus dans ma db, et je ne voudrais pas tout mélanger ...........
Et d'ailleurs, je ne sais pas comment faire !!!!!
C'est risqué !
Et d'ailleurs, je ne sais pas comment faire !!!!!
C'est risqué !
OK !
Dans ma requête SELECT, id représente un individus.
date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4 représentent les dates de son ou ses mariages.
num_cj_1, num_cj_2, num_cj_3, num_cj_4 représentes son ou ses conjoints.
Avec ses renseignements, je construit un arbre généalogique.
J'ai une case qui correspond à l'individu. A côté, une case par conjoint avec la date du mariage.
Donc je veux mettre les mariages dans l'ordre, car dans la base, ils ont été enregistrés au fur et à mesure de leur découverte, et pas forcément dans l'ordre .....
Dis-moi si je suis assez clair ....... :o)
$selectA = 'SELECT date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4, num_cj_1, num_cj_2, num_cj_3, num_cj_4 FROM ville_bis WHERE id LIKE "'.$id.'" ';
Dans ma requête SELECT, id représente un individus.
date_mariage_1,date_mariage_2,date_mariage_3,date_mariage_4 représentent les dates de son ou ses mariages.
num_cj_1, num_cj_2, num_cj_3, num_cj_4 représentes son ou ses conjoints.
Avec ses renseignements, je construit un arbre généalogique.
J'ai une case qui correspond à l'individu. A côté, une case par conjoint avec la date du mariage.
Donc je veux mettre les mariages dans l'ordre, car dans la base, ils ont été enregistrés au fur et à mesure de leur découverte, et pas forcément dans l'ordre .....
Dis-moi si je suis assez clair ....... :o)
Tout à fait, mais comment extraire le premier conjoint (donc avec la date de mariage minimum) pour l'afficher ?
en ajoutant encore une boucle...
$rowA = mysql_fetch_array($resultA); $a = array(); for($i = 1,isset($rowA['date_mariage_'.$i]),$i++) $a[] = array($rowA['date_mariage_'.$i],$rowA['num_cj_'.$i]); $b = array(); for($i = 0;isset($a[$i]);$i++) { if(empty($a[$i][0]) || empty($a[$i][1])) continue; $b[substr($a[$i][0],-4)] = $a[$i]; } ksort($b); $a = array(); foreach($b as $v) $a[] = $v; var_dump($a);
Merci Atropa. Mais je ne vois pas comment je peux exploiter le résultat !?
array(3) { [0]=> array(2) { [0]=> string(17) "Avant 16 DEC 1685" [1]=> string(4) "4603" } [1]=> array(2) { [0]=> string(10) "4 FEB 1686" [1]=> string(3) "868" } [2]=> array(2) { [0]=> string(10) "3 OCT 1701" [1]=> string(4) "3361" } }
J'ai bien mes trois mariages : string(17) et 2xstring(10). Et j'ai bien mes 3 conjoints 2xstring(4) et string (3).
Mais je ne sais pas comment faire avec cela !!!!!!
J'ai repensé à ta proposition de remodeler la bd. Ou plutôt d'en créer une deuxième avec les individus + date mariage + conjoint.
Donc ce serait 1 enregistrement = 1 mariage ?
En sachant que dans ma base actuelle, un enregistrement comprend un individu, ses dates de mariages (de 0 à 4), ses conjoints (de 0 à 4), plus d'autres renseignements (père, mère, date_dc.......).
Comment récupérer l'individu, et créer autant d'enregistrement qu'il y a de mariage ?
array(3) { [0]=> array(2) { [0]=> string(17) "Avant 16 DEC 1685" [1]=> string(4) "4603" } [1]=> array(2) { [0]=> string(10) "4 FEB 1686" [1]=> string(3) "868" } [2]=> array(2) { [0]=> string(10) "3 OCT 1701" [1]=> string(4) "3361" } }
J'ai bien mes trois mariages : string(17) et 2xstring(10). Et j'ai bien mes 3 conjoints 2xstring(4) et string (3).
Mais je ne sais pas comment faire avec cela !!!!!!
J'ai repensé à ta proposition de remodeler la bd. Ou plutôt d'en créer une deuxième avec les individus + date mariage + conjoint.
Donc ce serait 1 enregistrement = 1 mariage ?
En sachant que dans ma base actuelle, un enregistrement comprend un individu, ses dates de mariages (de 0 à 4), ses conjoints (de 0 à 4), plus d'autres renseignements (père, mère, date_dc.......).
Comment récupérer l'individu, et créer autant d'enregistrement qu'il y a de mariage ?
excuse moi mais tu sais coder en php ?
sinon pour tes bases de données oui une nouvelle table a chaque fois qu'il y a plusieurs éléments pour un même individu
père mère on en a qu'un et ca ne changera jamais donc un champ suffit
mariage on peut en avoir plusieurs pareil pour les enfants donc une table mariage,une table enfant etc
sinon pour tes bases de données oui une nouvelle table a chaque fois qu'il y a plusieurs éléments pour un même individu
père mère on en a qu'un et ca ne changera jamais donc un champ suffit
mariage on peut en avoir plusieurs pareil pour les enfants donc une table mariage,une table enfant etc