[Jointures]Update et Delete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Jointures]Update et Delete

par Zolmitriptan » 23 mai 2007, 15:25

Bah, c'est pas grave du tout, puisque de toute façon c'est quand même grace à toi que j'ai pu trouver la solution :D

par Sékiltoyai » 23 mai 2007, 12:59

Ah, au temps pour moi. :-/

par Zolmitriptan » 23 mai 2007, 10:53

Ce n'est pas une jointure, c'est un produit carthésien.
Ce que j'ai fais oui, mais si tu vas voir sur la page que ja donné en lien, tu peux y lire :
Les exemples ci-dessus présente des jointures internes, en utilisant l'opérateur virgule, mais les DELETE multi-tables peuvent utiliser n'importe quel type de jointure qu'une commande SELECT accepte, comme un LEFT JOIN.
On peut d'ailleur lire le même genre de chose sur la page de "update". Donc les jointures peuvent se faire sur select, update et delete, sur.

par Sékiltoyai » 22 mai 2007, 17:52

Ce n'est pas une jointure, c'est un produit carthésien.

par Zolmitriptan » 22 mai 2007, 17:36

Pour ce que tu dis par contre sur les DELETE, tu peux utiliser les FOREIGN KEY. (regarde la doc MySQL).
Et bien, merci !! Mais, grace à toi (et à la doc) j'ai trouvé mieux, et je te contredis donc : il n'y a pas que dans les select que l'on peut utiliser les jointures !!

Voir sur cette page pour les interessés.

De même, les clé etrangères ne sont pas non plus necessaires, voila comment j'ai procédé, sans jointure et sans clés :

Code : Tout sélectionner

DELETE post, topic, theme, category FROM post, topic, theme, category WHERE post.top_id=topic.top_id AND topic.th_id=theme.th_id AND theme.cat_id=category.cat_id AND category.cat_id=.$_POST['id'];
Resultat : une belle requête simple et clair au lieu de 4 !! Et je vais regarder de plus près pour les jointure, pour que ce soit encore "beau" !

Si ca marche pour les delete, il n'y a pas de raison que ca n'existe pas pour les updates, je vais donc continuer de regarder cette doc de plus près :D .

Donc, encore merci à toi pour ce TRES BON conseil qui derait être un reflexe : regarder la doc !!

Je met en résolu pour les prochains dans la galère comme moi :lol:

par Sékiltoyai » 22 mai 2007, 16:50

Pour ce que tu dis par contre sur les DELETE, tu peux utiliser les FOREIGN KEY. (regarde la doc MySQL).

par Zolmitriptan » 22 mai 2007, 15:16

Ouais, mais en fait dans toute sles requètes tu peux utiliser des sous requètes, donc tu peux te démerder sans utiliser JOIN.
On est d'accord. Mais la....ca vaêtre hard...ou/et très long. En gros, la c'est pour les delete. Je travail sur un forum.

je veux supprimer une catégorie, et donc tout ce qu'elle contient. Une catégorie contient un ou plusieurs thèmes, qui contiennent eux même un ou plusieurs sujet, qui contiennent eux même un ou plusieurs messages (aucun ou plusieurs en fait, mais comme on ne le sait pas à l'avance, il faut quand même faire la requête).

Donc, je supprime la catégorie avec l'id donné. Puis il faut que je supprime tout les thèmes dont leur id_cat = l'id de la catégorie. Puis, il faut que je supprime tout les sujets dont leur id_theme = l'id d'un theme dont l'id_cat = l'id de la catégorie. Et enfin, il faut que je supprime tout les messages dont leur id_sujet = l'id d'un sujet dont leur id_theme = l'id d'un thème dont leur id_cat = l'id de la catégorie.....compris ? :lol:
Et cela, avec les jointures c'est simple ! Mais sans....aie, aie aie.
Donc pitié, que quelqu'un me dise qu'on peut faire des jointure avec les DELETE, et accessoirement avec les UPDATE :roll: (ben quoi, on peut toujours esperer non ?? :lol: ). Et si possible avec la bonne syntaxe...parce que malgré mes nombreux test et essais en tout genre :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL......
Mas bon, d'après ce que tu me dis, je vais devoir me resigner....à moi requête et sous requête et sous sous requête......

par Sékiltoyai » 22 mai 2007, 14:56

Bon, je vais essayer ce que tu me propose, j'espère que ca va marcher, merci en tout cas. Et si quelqu'un pouvait venir te contredire ( :lol: ), ce serait magnifique !!
Ouais, mais en fait dans toute sles requètes tu peux utiliser des sous requètes, donc tu peux te démerder sans utiliser JOIN.

par Zolmitriptan » 22 mai 2007, 14:53

Si je ne me trompe, tu ne peux utiliser les jointures que dans une requète SELECT.
Bon, je vais prier pour que tu te trompe, parce qu'avec les DELETE que je dois faire, je vais devenir fou avant d'avoir fini.....
Edit : et tu avais enlevé les alias.
Oups.... :oops: petite erreur désolé.

Bon, je vais essayer ce que tu me propose, j'espère que ca va marcher, merci en tout cas. Et si quelqu'un pouvait venir te contredire ( :lol: ), ce serait magnifique !!

par Sékiltoyai » 22 mai 2007, 14:46

Si je ne me trompe, tu ne peux utiliser les jointures que dans une requète SELECT.
Essaye ceci :

Code : Tout sélectionner

UPDATE table1 AS t1, table2 AS t2 SET t1.champ1=(t1.champ1+1), t2.champ1=(t2.champ1+1) WHERE t2.t1_id = t1.id && t1.t1_id = $id
Edit : et tu avais enlevé les alias.

[Jointures]Update et Delete

par Zolmitriptan » 22 mai 2007, 14:32

Bonjour à tous,

Voila, j'aimerais savoir s'il est possible de faire des jointure entre les tables pour des update et/ou pour des delete ??

Parce que, pour le moment, disons que je fais cela :

Code : Tout sélectionner

UPDATE table1 as t1 SET t1.champ1=(t1.champ1+1) WHERE t1.id=(SELECT t1_id FROM table2 WHERE table2.t1_id = $id) UPDATE table2 as t2 SET t2.champ1=(t2.champ1+1) WHERE t2.t1_id=$id
Donc deux requêtes. Est-ce que je peux faire :

Code : Tout sélectionner

UPDATE table1, table2 SET t1.champ1=(t1.champ1+1), t2.champ1=(t2.champ1+1) LEFT JOIN table2 ON table2.t1_id = table1.id WHERE t1_id = $id
J'ai essayé avec plusieurs forme d'ecriture, j'ai toujours eu une erreur du type :
You have an error in your SQL syntax;
Je suis en train de me dire que c'est impossible a faire....

Quelqu'un pour me dire que j'ai tort svp :wink: ??