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

Fermé
Signaler
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
-
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
-
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

Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
223
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
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
Merci naga, mais le tri sur date_mariage (du plus loin au plus prêt) ne se fait toujours pas :o(
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10 >
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021

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.
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021
3 847 >
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021

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.....
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10 >
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021

Oui, mais peu importe ! Je fais de toute façon mon test sur un champ. Et je compare ces champs !
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021
3 847 >
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021

......
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)
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10 >
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021

Je pense que c'est possible de tester sur deux champs en VARCHAR !?
Messages postés
1312
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
13 novembre 2021
10
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();
Messages postés
34139
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2021
3 847
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 ;......
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
223
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