Exporter donnée d'une table avec jointur sql [Résolu/Fermé]

Signaler
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
-
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
-
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

14 réponses

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
je suis sur phpMyadmin avec base sql

et je teste ave easy php sur une base sql aussi
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
la syntax est bonne non??
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
Bonjour,

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

A plus
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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 ???
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 350
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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
Messages postés
312
Date d'inscription
mardi 12 février 2008
Statut
Membre
Dernière intervention
12 mars 2013
12
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