commande select

sel
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 14:27

phpMyAdmin - 2.10.3

* Version du client MySQL: 3.23.39
* Extensions PHP utilisées: mysql

Table: t
Create Table: CREATE TABLE date(
id int(11) default NULL auto_increment,
date date(60) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM

bonjour

je voudrais faire un select de tous les personnes qui n'ont pas acheter depuis 12mois dans un table




sachant que la date de création et la date de paiement sont toujours le meme si la personne a fait un achat

Code : Tout sélectionner

select * from table where datecreationfacture not between '2007-07-01' and '2008-07-01' and datepaiementfacture not between '2007-07-01' and '2008-07-01'
ça ne retourne pas le resultat que je veux

ça retourne simplement les factures qui ne sont pas entre ces deux dates alors que la personne a fait un ou des achats entre ces 2 dates

je veux retourné les personnes qui nont pas acheter depuis 12 moi

merci

Mammouth du PHP | 1353 Messages

01 juil. 2008, 14:33

Je ne sais pas comment tu établis le lien entre tes tables personnes et factures (si ce n'est pas tout dans la meme table) mais je pense qu'il faudrait plus raisonner comme cela :

Code : Tout sélectionner

Selectionner toutes les personnes dont la date du dernier achat est inférieur à aujourd'hui - 12 mois.
Parce que la c'est pas parce qu il y a des factures plus anciennes que les gens n'ont rien acheté depuis...

Essaye de transposer en SQL la phrase ci dessus et tu devrais avoir le resultat voulu.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

sel
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 14:39

merci pour votre réponse

mais le probleme c'est que la date du dernier achat d'un personne ainsi que la datedepaiement sont dans le même champs datepaiementfacture

si ce champ est renseigné c'est que la personne a payé :shock:

merci

Mammouth du PHP | 1353 Messages

01 juil. 2008, 14:46

En quoi est ce un problème ?

Il suffit pour chaque personne de récupérer la dernière date de paiment (donc la + grande) et de voir si elle est dans les douze mois qui précèdent la date du jour ou non... Ainsi on saura si la personne a acheté quelque chose depuis douze mois ou pas.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 08:27

bonjour

voila la structure de ma table


personne
id nom prenom adresse


facture
id libelle id_personne datecreationfacture datepaiementfacture

jai fait comme ça pour récupérer l'id de toutes les personnes
select id from personne 
ensuite pour récupérer la date de paiement
select datepaiementfacture from personne p , facture f where f.id_personne in (id) and date paimentfacture not between '2007-07-01' and '2008'07'01'
mais je crois que le not between n'est pas correct

si vous avez des suggestions
merci

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 08:58

voila je pense trouver une solution mais je ne sais pas le traduire en langage sql

je voudrais faire ça


selectionner l'id de toutes les personnes  dans la table facture dont la datepaiementfacture n'existe pas entre '2007-07-01' et '2007-08-01'


je ne sais pas si ça pourrait marché

merci

Mammouth du PHP | 1353 Messages

02 juil. 2008, 09:59

Normalement cette requete devrait fonctionner, pour traduire ce que tu dis :

Code : Tout sélectionner

"SELECT DISTINCT id_personnes FROM personne p, facture f WHERE f.id_personnes IN (p.id) AND (f.datepaiementfacture) NOT BETWEEN '2007-07-01' and '2008-07-01'";
Cela dit, pourquoi vérifier l'id personne ? Il existe des gens dans la table facture qui ne sont pas dans la table personne ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 10:07

merci pour votre réponse et ceux qui ont lu mon post

voila ja trouver la solution


SELECT f.id_personne, p.nom
p.prenom, MAX( datepaiementfacture )
FROM personne p, facture f
WHERE p.id = f.id_personne

GROUP BY f.id_personne
HAVING MAX( datepaiementfacture ) NOT
BETWEEN '2007-007-01'
AND '2008-07-01'
ORDER BY nom

merci :lol: