You have an error in your SQL syntax ..........

Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 30 nov. 2016 à 15:40
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 30 nov. 2016 à 18:04
Bonjour,

Dans mon script j'ai l'erreur
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mai 1787, -4) ASC)' at line 1

$tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row['date_mariage_1'] , "conjoint" => $row['num_cj_1'] );
$tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row['date_mariage_2'] , "conjoint" => $row['num_cj_2'] );
$tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row['date_mariage_3'] , "conjoint" => $row['num_cj_3']);
$tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row['date_mariage_4'] , "conjoint" => $row['num_cj_4']);

$query4 = 'SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ORDER BY (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC)';
$result4 = mysql_query($query4) or die(mysql_error());
$row4 = mysql_fetch_array($result4);


Je veux sortir la liste des mariages d'un individu trié par les 4 derniers caractères de la date de mariage.

Merci !

4 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
30 nov. 2016 à 15:48
Salut,

Le message d erreur est assez explicite, un echo de ta requête t aurai mis sur la voie si tu ne le vois pas directement.

Donc dans ta requete:

$query4 = 'SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ORDER BY (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC)';


Il y a deux erreurs:
- Le
LIKE '.$tonarray[$i]['conjoint'].' 
: d'une part il manque les quotes (c'est un string), et d'autre part l utilisation du like inclu un joker .. ce n est pas une obligation mais faire un like sur une chaine fixe est une hérésie ! mécréant! ^^. Plus sérieusement, en mettant
soit
WHERE num_indiv LIKE "'.$tonarray[$i]['conjoint'].'%" ORDER BY 

soit
WHERE num_indiv = "'.$tonarray[$i]['conjoint'].'" ORDER BY 

Le premier problème sera corrigé.

- le
ORDER BY (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC)'
: même remarque pour le string: manque les quotes. Donc:
ORDER BY (SUBSTRING("'.$tonarray[$i]['date_mariage'].'", -4) 
ASC)'


Test et confirme si c est ok.

naga
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
30 nov. 2016 à 16:19
Merci naga, mais le tri sur date_mariage (du plus loin au plus prêt) ne se fait toujours pas :o(
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 nov. 2016 à 16:35
Bonjour,

Je pense, en regardant ton message d'erreur... que tu as stocké tes dates dans un champ varchar ....
Sauf que pour stocker des dates en BDD ... il existe des champs de type DATE .... et c'est sur ce type de champ que tu peux trier des dates ......
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
Modifié par t671 le 30/11/2016 à 16:43
Effectivement, j'ai stocké mes dates en VARCHAR, car elles peuvent avoir la forme :
JJ janvier AAAA
février AAAA
AAAA
vers AAAA ..............
Et donc, pour les trier, je prends les 4 derniers caractères, soit AAAA.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024
Modifié par jordane45 le 30/11/2016 à 17:03
Les dates se stockent au format DATE dans un CHAMP DATE.
Après... tu peux jouer avec l'AFFICHAGE ... mais la donnée elle est toujours stockée dans le bon format ......
Passer par un varchar est une grosse erreur.....
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
30 nov. 2016 à 17:01
Oui, mais peu importe ! Je fais de toute façon mon test sur un champ. Et je compare ces champs !
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024
30 nov. 2016 à 17:04
......
En attendant... si tu veux voir ce qui ne va pas dans ta requête... fais donc un ECHO de celle ci .. puis testes la DIRECTEMENT dans ta BDD (via phpmyadmin par exemple)
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
30 nov. 2016 à 17:28
Si je fais un "echo $query4", il m'affiche
SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv = "4792" ORDER BY (SUBSTRING("28 mai 1787", -4)) ASCSELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv = "4795" ORDER BY (SUBSTRING("1782", -4)) ASC
Le premier mariage enregistré dans la base est bien le num_indiv 4792 en 1787.
Le second mariage ajouté dans la base est bien le num_indiv 4795 en 1782.
En résultat je veux afficher celui en 1782 puis en 1787, ce qui n'est pas le cas actuellement !
Si je le test directement via ma BDD il ne reconnait pas $tonarray = array();
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 nov. 2016 à 17:31
Si je le test directement via ma BDD il ne reconnait pas $tonarray = array();

.... ce que tu dois tester directement dans phpmyadmin... c'est pas le code PHP ... mais la requête que tu as obtenu en faisant le ECHO ;......
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
30 nov. 2016 à 18:04
je reviens du coup, mais tu veux faire le tri depuis un varchar donc?
Je remets pas en question de ton choix même si je ne suis pas d'accord avec toi mais bref.

en fait j avais pas regardé ton order, tu tries avec une valeur fixe puisque issue de php, et non d une colonne de ta base de donnée.
du coup essaie plutot :

ORDER BY (SUBSTRING(date_dc, -4) ASC)


en supposant que date_dc correspond a la date de mariage.

naga
0