IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Unknown table 'id_reponse' in MULTI DELETE


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut Unknown table 'id_reponse' in MULTI DELETE
    Salut

    Sous Mysql , j'ai du mal à effectuer une suppression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT reponse.id_reponse FROM reponse,question,sondage WHERE question.id_question=reponse.id_question AND question.id_sondage=sondage.id_sondage AND question.id_sondage=2;
    Ici j'ai la liste de l'ensemble des id reponse que je veut supprimer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE reponse.id_reponse FROM reponse,question,sondage WHERE question.id_question=reponse.id_question AND question.id_sondage=sondage.id_sondage AND question.id_sondage=2;
    Et lorsque je remplaces le SELECT par un DELETE pour les supprimer , j'ai le message d'erreur (cf.titre du sujet)

    Cordialement,

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    La syntaxe c'est "DELETE FROM TABLE ..."
    Ta query est mal formée

  3. #3
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE id_reponse  FROM reponse WHERE reponse,question,sondage AND question.id_question=reponse.id_question AND question.id_sondage=sondage.id_sondage AND question.id_sondage=2;
    comme ça ?

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Salut,

    Tu veux faire quoi au juste ?

    Un DELETE ne sert qu'à supprimer une ligne entière d'une table, et pas la valeur d'un champ.

  5. #5
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Je voudrais effacer une colonne de valeurs, qui sont des ID.

    Par exemple lors de mon SELECT , j'ai :
    ID_reponse
    1
    3
    5
    6


    Ben en fait je voudrais supprimer l'ensemble de cette colonne avec un DELETE.

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Ce n'est pas possible de supprimer une colonne de certaines lignes.

    Soit tu supprimes les lignes, soit tu affectes une valeur NULL à ID_reponse portant des numéros.

    Dans quel but voudrais tu faire ceci ?

  7. #7
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    un sondage comporte des réponses qui font parti des question.

    Donc lorsque je veut supprimer un sondage , je veut d'abord supprimer les réponses de ce sondage PUIS les questions.

    Comment pourrais-je supprimer les lignes des id réponses d'un sondage sélectionné ?

    Avec le SELECT , j'affiche ce que je veut supprimer , il y a bien un moyen de faire ça avec une requete m'enfin.

    Je vais modifier mon script de façon à faire une requete SELECT puis stocker les résultats dans un tableau et je supprimerais chaque ID ensuite.

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    En utilisant des clefs étrangères et on delete cascade (innodb), cela aurait été un jeu d'enfant

    Sinon, sans, pour les réponses.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM reponse WHERE id_question IN (SELECT id_question FROM question WHERE id_sondage=2);


  9. #9
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Ben justement , j'ai un moteur InnoDB , je devrais faire comment la suppression en cascade ?

  10. #10
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$sql="SELECT reponse.id_reponse FROM reponse,question,sondage WHERE question.id_question=reponse.id_question AND question.id_sondage=sondage.id_sondage AND question.id_sondage='".$id_sondage."' ";
    	$req=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    	while($row = mysql_fetch_row($req))
    	{
    		$sql="DELETE FROM reponse WHERE id_reponse='".$row[0]."' ";
    		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    	}
    J'ai modifié mon script et la c'est OK. Qu'en penses tu ?

  11. #11
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Citation Envoyé par Kenshin86 Voir le message
    Ben justement , j'ai un moteur InnoDB , je devrais faire comment la suppression en cascade ?
    Il faut déclarer les ids relationnels en clef étrangères.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE reponse ADD FOREIGN KEY(id_question) REFERENCES question(id_question) ON DELETE CASCADE;

    Pareil pour la table question et l'id du sondage.

    Et hop, un simple delete sur la table sondage supprimera toutes ses dépendances.

  12. #12
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Ok, j'y penserais pour les prochaines fois...
    En tout cas, la modification dans le script fonctionne.

    Merci.

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En terme de performance il vaut mieux recolter les clefs que tu veux supprimer en faire un seul delete que faire une boucle de delete.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.1] Unknown Table OLD - Trigger AFTER DELETE
    Par poissonjone77 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 28/06/2013, 11h59
  2. Tables de paramètre multi langue - problème de mapping
    Par arnovodao dans le forum Hibernate
    Réponses: 2
    Dernier message: 05/03/2013, 20h12
  3. phpmyadmin erreur: unknown table status: TABLE_TYPE
    Par Benduroy dans le forum Administration
    Réponses: 5
    Dernier message: 27/11/2012, 15h56
  4. Unknown table engine 'InnoDB' error 1286 sur Mysql
    Par screeminelle dans le forum Administration
    Réponses: 6
    Dernier message: 08/02/2011, 11h54
  5. [MySQL] Remettre auto_increment d'une table à 1 après un delete
    Par Joe Le Mort dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/01/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo