formulation du WHERE problematique - SQL/NoSQL - Programmation
Marsh Posté le 12-04-2008 à 14:45:21
Etant donné qu'il existe au moins une ligne de facture qui n'est pas sur 2008, il est normal que ta requête retourne ton article n°1.
Pour récupérer tous tes articles qui n'ont pas eu de ventes sur 2008, il faut une requête différente, comme par exemple :
Code :
|
Marsh Posté le 12-04-2008 à 15:53:19
Merci.
Problême: j'avais oublié de préciser que je suis en Mysql 4.0.2, donc incompatible avec les sous-requêtes.
Marsh Posté le 12-04-2008 à 16:02:35
petit indice il va donc falloir passer par des requetes externes dans ce cas ...
Marsh Posté le 12-04-2008 à 11:36:25
Bonjour
Pour résumer, je voudrais savoir les articles qui ne se sont pas vendus sur une période donnée.
Mes tables, simplifiées au maximum:
CREATE TABLE article (article_id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (article_id));
CREATE TABLE facture (facture_id INT NOT NULL AUTO_INCREMENT, facture_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (facture_id));
CREATE TABLE facture_ligne (facture_ligne_id INT NOT NULL AUTO_INCREMENT, fk_article_id INT NOT NULL, fk_facture_id INT NOT NULL, PRIMARY KEY (facture_ligne_id));
où la table facture_ligne renvoie aux données de article et facture.
En guise d'exemple:
1 enregistrement dans la TABLE article. Son article_id vaut 1
3 enregistrement dans la TABLE facture
(facture_id , facture_date)
(1 , 2007-01-01 00:00:00)
(2 , 2008-01-01 00:00:00)
(3 , 2008-01-15 00:00:00)
et enfin 3 enregistrement dans la TABLE facture_ligne
(facture_ligne_id , fk_article_id , fk_facture_id)
(1 , 1 , 1)
(2 , 1 , 2)
(3 , 1 , 3)
Si je fais un
SELECT article_id
FROM article
LEFT JOIN facture_ligne ON fk_article_id = article_id
LEFT JOIN facture ON facture_id = fk_facture_id
AND facture_date BETWEEN "2008-01-01 00:00:00" AND NOW()
WHERE facture_id IS NULL
je vais avoir un retour sur article 1, alors que j'ai eu des ventes sur 2008.
Il faut donc que je modifie cette requête pour qu'elle ne me renvoie l'article concerné que si AUCUN facture_id NOT NULL n'y est associé.
J'avoue caler.
Quelqu'un aurait-il la solution?