Exporter donnée d'une table avec jointur sql

Résolu/Fermé
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 - 15 mai 2009 à 09:00
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 - 18 mai 2009 à 14:22
Bonjour,


j'ai un petit problème je dois prendre les données d'un champs lui enlevé deux jours et le remettre dans un autre champs le champs ou il est

est : planning_date

et ce qui ce trouve dans la table planning=>champs=>planning_date: est comme cela 2008-12-21 00:00:00

donc je doit prendre cette date là 2008-12-21 et lui enlever 2 jours pour

pouvoir le mettre dans la table customers=>champs=>customers_date_inscription

donc dans planning_date la date est 2008-12-21 je doi lui enlevé deux jours soit la date doit être 2008-12-19 quand on l'insère dans le champs customers_date_inscription

j'ai commencé ma requette afin de récupérer toute les dates de planning_date par id car le problème c'est que un id peut avoir plusieur planning_date différent et que je doit prendre la première par customers

ma requete:

UPDATE customers 
SET  customers_date_inscription = DATE_SUB(
(
SELECT MIN(planning_date) 
	FROM es_planning
	WHERE   planning_type='gratuite'
	
), 'INTERVAL 2 DAY') 
WHERE customers_id 


voilà mon code mon problème est surtou a la fin dans mon WHERE customers_id es-ce que si je l'enlève sa va me mettre dans le champs customers_date_inscription toutes les date par customers normalement je doit fair une jointure pour que sa aille dans es_planning.customers_id = es_customers.customers_id mais comme ma requette est formé je sais pas trop ou mettre cette jointure donc j'ai fait comme sa:

	UPDATE es_customers 
SET  cu.customers_date_inscription = DATE_SUB(
(
SELECT MIN(pl.planning_date) 
	FROM es_planning pl, es_customers cu
	WHERE   pl.planning_type='gratuite'
	
), 'INTERVAL 2 DAY') 
WHERE cu.customers_id = pl.customers_id 
 


donc si quelqu'un peu m'aider ce serait gentille merci

A voir également:

14 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 10:39
Bonjour,

Je pense que le code devrait être le suivant
UPDATE es_customers 
SET  customers_date_inscription = DATE_SUB(
( SELECT MIN(pl.planning_date) 
    FROM es_planning pl
  WHERE pl.customers_id = customers_id
       AND pl.planning_type='gratuite'), 'INTERVAL 2 DAY')

J'ai pas testé, a toi de voir
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 11:24
je te remerci mais sa me sort qu'une date donc j'ai mis un groupe by pour que sa me sorte tou

de plus sa me mettai une erreur :#1064 - Erreur de syntaxe près de ''INTERVAL 2 DAY')' à la ligne 7

donc j'ai enlevé les ' ' entre interval 2 days et j'ai une nouvelle erreur qui est

#1241 - Operand should contain 1 column(s)

donc voila ou j'en suis merci pour ton aide
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 11:47
Bonjour,

Petite question, quelle base de données utilises-tu ? Cela afin de trouver la syntaxe exacte pour soustraire deux jours à une date.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 11:49
je suis sur phpMyadmin avec base sql

et je teste ave easy php sur une base sql aussi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 12:22
la syntax est bonne non??
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 12:33
Bonjour,

Selon la documentation de MySql, il ne faut pas utiliser de ' pour interval
DATE_SUB('2009-05-15', INTERVAL 2 DAY)

A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 12:38
oui j'ai vue c'est pour sa que je l'ai enlevé mais comme je t'ai dit il me donne un nouveau message d'envoit qui est :#1242 - Subquery returns more than 1 row

et le code est comme sa

UPDATE en_customers 
SET  customers_date_inscription = DATE_SUB(
( SELECT MIN(pl.planning_date) 
    FROM en_planning pl
  WHERE pl.customers_id = customers_id
       AND pl.planning_type='gratuite'
	   GROUP BY customers_id ), INTERVAL 2 DAY)

j'avais rajouté GROUP BY customers_id pour que sa me sorte tous les id sinon sa me mettait que celui de customers_id=1
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 14:12
J'ai enlevé le group by customers_id et sa ma mis sur tous les champs customers_date_inscription la même dates pour tous
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 14:25
donc j'ai essayer une jointure de ce style car pour chaque customers_id (de la table en_customers) = customers_id (de la table en_planning)

donc j'ai essayer comme sa:

UPDATE en_customers JOIN
(SELECT MIN(planning_date) as min_planning_date
	FROM en_planning
	WHERE planning_type='gratuite'
        GROUP BY customers_id
) as planning
USING (customers_id)
SET  customers_date_inscription = DATE_SUB(min_planning_date, INTERVAL 2 DAY)

et sa ma afficher ce message:
#1054 - Champ 'customers_id' inconnu dans from clause

donc j'ai changé en pour la jointure mais toujours rien
UPDATE en_customers JOIN
(SELECT MIN(planning_date) as min_planning_date
	FROM en_planning
	WHERE planning_type='gratuite'
        GROUP BY customers_id
) as planning
USING ( en_customers.customers_id = en_planning.customers_id )
SET  customers_date_inscription = DATE_SUB(min_planning_date, INTERVAL 2 DAY)

et sa ma mis:
#1064 - Erreur de syntaxe près de '.customers_id = en_planning.customers_id ) SET customers_date_inscription = DA' à la ligne 7
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 14:50
Bonjour,

Voici le code qui devrait faire ce que tu veux, un peu en retard mais bon, d'abord le lunch et ensuite j'ai crée une base de données de test avec tes deux tables, donc j'ai testé le code et cela fonctionne
update en_customers cu
set cu.customers_date_inscription = date_sub(
(select min(pl.planning_date) from en_planning pl
where pl.customers_id = cu.customers_id
and pl.planning_type='gratuite'),interval 2 day)

A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 15:35
là elle est lancé j'attend de voir les résultats mais déjà sa tourne donc c'est bon signe j'espère que ta bien mangé en tous cas merci pour ce que tu as fait mais je te réserve les éloge quant j'aurai mes résults
a plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 16:31
hello c'est vrai que j'ai un peu moin de 20'000 enregistrement mais là sa fait une heure que sa tourne tu avais combien de donné quant tu as lancé cette requette un peu près 5 -6 ???
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 16:55
Bonjour,

Dans la table des customers, j'avais 5 entrées et dans la table planning 2 à 3 entrées par customer.
Est-tu sûr d'avoir une clé primaire sur la colonne customer_id dans les deux tables, sinon la requête va lire pour chaque customer tous les enregistrements de ta table planning.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
15 mai 2009 à 17:07
oula la clé primaire de la table planning est planning_id et la foreign key c'est customers_id

car dans la table planning j'ai

planning_id relances_id customers_id
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
15 mai 2009 à 17:14
Bonjour,

Tu peux toujours rajouté une clé secondaire formée par les colonnes customer_id et planning_date dans ta table planning, cette clé sera non unique puisque tu peux avoir plusieurs enregistrements pour le même customer_id, cela devrait améliorer le temps nécessaire à ta mise à jour.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
18 mai 2009 à 09:23
Hello, j'ai laissé tourner un bon moment mais le problème c'est que maintenant dans mon champs dates_inscription j'ai la même date et pas la date du champs planning - 2
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
18 mai 2009 à 14:22
Merci Christounet,

ton scripte marche super bien ton aide ma été précieu merci beaucoup enffette après vérification le dernier message que j'ai mis tu peu le zapé bonne après midi

a plus
0