Posez votre question Signaler

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

sinifer 309Messages postés 12 février 2008Date d'inscription - Dernière réponse le 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
Lire la suite 

Exporter donnée d'une table avec jointur sql »

17 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
je suis sur phpMyadmin avec base sql

et je teste ave easy php sur une base sql aussi
Ajouter un commentaire
Réponse
+0
moins plus
la syntax est bonne non??
Christounet- 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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Christounet- 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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ???
Christounet- 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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « exporter donnée d'une table avec jointur sql » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?