Requête,pourquoi tu veux pas fonctionner

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête,pourquoi tu veux pas fonctionner

par albat » 29 mai 2006, 00:15

:tir2: :axe:

par theNoob! » 28 mai 2006, 23:56

C'est bon ça marche !!! :D

J'ai simplement supprimé tab1 et AS tab1

par Hubert Roksor » 28 mai 2006, 23:52

Le problème vient certainement de l'alias, donc il faut retirer le "AS tab1" et "tab1."

De plus, il vaudrait mieux utiliser un DELETE multi-table en réécrivant la sous-requête sous la forme d'une jointure pour des raisons de performances.

par theNoob! » 28 mai 2006, 23:52

Nan désolé toujours rien :(

par albat » 28 mai 2006, 23:39

Et en virant les retours chariot ?
$query = "DELETE FROM contenu_fac AS tab1 WHERE tab1.id_fac IN (SELECT tab2.num_fac FROM facture AS tab2 WHERE tab2.etat_fac = 'nonfacture' AND tab2.date_fac < ".($aujourdhui - 604800).")";

par albat » 28 mai 2006, 23:37

Y a quand même un truc qui me chiffonne... J'suis pas sûr à 300% de ma solution... :-k :ordi:

par albat » 28 mai 2006, 23:35

:idea: TROUVÉ !

1. Il faut extraire les variables PHP des chaînes de caractères, c'est plus propre.

2. Si ta variable $aujourdhui a pour valeur 704800,
la requête qui va être générée contiendra la clause
AND  tab2.date_fac < (704800 - 604800)
au lieu de :
AND  tab2.date_fac < 100000
Ceci devrait mieux fonctionner...
$query= "DELETE
         FROM   contenu_fac AS tab1
         WHERE  tab1.id_fac IN (SELECT tab2.num_fac
                                FROM   facture AS tab2
                                WHERE  tab2.etat_fac = 'nonfacture'
                                  AND  tab2.date_fac < ".($aujourdhui - 604800).")";

par Truc » 28 mai 2006, 23:34

Le message d'erreur débute juste avant le WHERE il manque peut être un espace à cet endroit entre l'alias et WHERE.

par theNoob! » 28 mai 2006, 23:25

Bon ben je désepère, ça me fait toujours la même erreur:

Erreur de syntaxe près de 'WHERE tab1.id_fac IN (SELECT tab2.num_fac ' à la ligne 3

je redonne la requête, peut-être que quelqu'un pourra me dire d'où ça vient:

Code : Tout sélectionner

$query= "DELETE FROM contenu_fac AS tab1 WHERE tab1.id_fac IN (SELECT tab2.num_fac FROM facture AS tab2 WHERE tab2.etat_fac = 'nonfacture' AND tab2.date_fac < ($aujourdhui - 604800))";

par albat » 24 mai 2006, 16:06

As-tu vérifié si ta sous-requête SELECT te retourne bien un enregistrement et un seul ?

Si cette requête retourne plusieurs enregistrements,
remplace : WHERE tab1.id_fac = (SELECT
par : WHERE tab1.id_fac IN (SELECT

par theNoob! » 24 mai 2006, 16:03

Sorry!
J'ai fait les modifs de albat, mais l'erreur existe encore...

Code : Tout sélectionner

Erreur de syntaxe près de 'WHERE tab1.id_fac = (SELECT tab2.num_fac ' à la ligne 3

par zeus » 24 mai 2006, 09:58

En complément de ce qu'on dit mes collègue, je voudrais te rappeller que les sous-requetes pour MySQL ne sont gérées que depuis MySQL 4.1 ;)

par albat » 23 mai 2006, 22:55

Essaie en virant les apostrophes qui délimitent ta sous-requête...
$query= "DELETE
         FROM   contenu_fac AS tab1
         WHERE  tab1.id_fac = (SELECT tab2.num_fac
                               FROM   facture AS tab2
                               WHERE  tab2.etat_fac = 'nonfacture'
                                 AND  tab2.date_fac < ($aujourdhui - 604800))";

par Truc » 23 mai 2006, 22:52

Salut,

Tu aurait pu donner le message d'erreur qui te faire dire que celà ne fonctionne pas :wink:

Mais je dirais qu'il y a déjà une erreur au niveau des apostrophes encapsulant la sous requête.

par Belinda92 » 23 mai 2006, 19:13

C 'est bizarre ça me semble correct pourtant...

Je vois vraiment pas,désolé !!!