Page 1 sur 2
Requête,pourquoi tu veux pas fonctionner
Posté : 23 mai 2006, 19:03
par theNoob!
Code : Tout sélectionner
$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)')";
Pourriez-vous m'aider,je désespère
Posté : 23 mai 2006, 19:13
par Belinda92
C 'est bizarre ça me semble correct pourtant...
Je vois vraiment pas,désolé !!!
Posté : 23 mai 2006, 22:52
par Truc
Salut,
Tu aurait pu donner le message d'erreur qui te faire dire que celà ne fonctionne pas
Mais je dirais qu'il y a déjà une erreur au niveau des apostrophes encapsulant la sous requête.
Posté : 23 mai 2006, 22:55
par albat
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))";
Posté : 24 mai 2006, 09:58
par zeus
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

Posté : 24 mai 2006, 16:03
par theNoob!
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
Posté : 24 mai 2006, 16:06
par albat
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
Posté : 28 mai 2006, 23:25
par theNoob!
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))";
Posté : 28 mai 2006, 23:34
par Truc
Le message d'erreur débute juste avant le WHERE il manque peut être un espace à cet endroit entre l'alias et WHERE.
Posté : 28 mai 2006, 23:35
par albat

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).")";
Posté : 28 mai 2006, 23:37
par albat
Y a quand même un truc qui me chiffonne... J'suis pas sûr à 300% de ma solution...

Posté : 28 mai 2006, 23:39
par albat
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).")";
Posté : 28 mai 2006, 23:52
par theNoob!
Nan désolé toujours rien

Posté : 28 mai 2006, 23:52
par Hubert Roksor
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.
Posté : 28 mai 2006, 23:56
par theNoob!
C'est bon ça marche !!!
J'ai simplement supprimé tab1 et AS tab1