0 ligne insérée

Résolu
Bonjour,
Je tente d'insérer des données avec des jointures, la syntaxe semble correcte mais rien n'est inséré dans ma table!
Y-a-t-il un problème avec ma version de phpmyadmin 4.3.12 ?

4 réponses

  1. Modérateur
    Bonjour,

    Déjà... il est préférable de nous coller le code que tu utilises.... plutôt que de nous en mettre une capture écran

    Ensuite.... as tu testé la partie "select" de ta requête directement dans ta BDD pour voir si elle retournait quelque chose ?

    1. Merci pour ta réponse.
      Le code que j'utilise est la requête affichée sur l'image :
      INSERT INTO structure (id_struct, famille_contact, id_typologie, nom_contact, desc_contact, nom_struct, nom_service, adres_struct, code_postal, ville, id_pays, tel_struct, fax_struct, mail_struct, page_web ) 
      SELECT x.`id_struct`, x.`famille_contact`, y.`id_typologie`, x.`nom_contact`,x.`desc_contact`,x.`nom_struct`,x.`nom_service`,x.`adres_struct`,x.`code_postal`,x.`ville`, z.id,  x.`tel_struct`,x.`fax_struct`, x.`mail_struct` ,x.`page_web`
      FROM brut as x, typologie as y, pays as z 
      WHERE x.typologie = y.typologie AND x.pays = z.pays;
      


      En essayant juste le SELECT, ça me retourne le message suivant :
      La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Edition, Copie et Supprimer ne sont pas disponibles.
  2. Modérateur
    Je n'ai jamais eu ce type d'erreur...

    Peux tu faire un SELECT * sur chacune de tes tables pouvoir voir si déjà là.. ça passe :
    
    SELECT * FROM brut;
    
    SELECT * FROM typologie;
    
    SELECT * FROM pays;
    

    1. Cela m'affiche bien les lignes de mes tables pour chacune d'elles.

      Affichage des lignes 0 - 17 (total de 18, Traitement en 0.0000 secondes.)
      Affichage des lignes 0 - 5 (total de 6, Traitement en 0.0010 secondes.)
      Affichage des lignes 0 - 24 (total de 222, Traitement en 0.0000 secondes.)
    2. Sur un serveur disant, j'ai obtenu un autre résultat : seule une ligne a été insérée (ligne 5).
      J'ai recopié le même code SQL en local, et j'ai eu ce résultat. La ligne 5 a été insérée correctement avec les clés étrangères.
  3. J'ai trouvé pourquoi, c'est à cause de l'orthographe des valeurs qui ne correspondent pas dans le WHERE :P
    Tout ça à cause d'un "s" .
    Merci pour ton aide!
    J'ai maintenant 15 lignes insérées au lieu de 18, et je sais pourquoi mais pas comment résoudre ça. En fait, il y a des valeurs qui sont vides pour pays, donc le WHERE ne se fait pas. Comment faire dans ce cas-là ?
    1. Tout est résolu.
      Il fallait utiliser le LEFT JOIN au lieu du WHERE.

      INSERT INTO structure (id_struct, famille_contact, id_typologie, nom_contact, desc_contact, nom_struct, nom_service, adres_struct, code_postal, ville, id_pays, tel_struct, fax_struct, mail_struct, page_web ) 
      select x.`id_struct`, x.`famille_contact`, y.`id_typologie`, x.`nom_contact`,x.`desc_contact`,x.`nom_struct`,x.`nom_service`,x.`adres_struct`,x.`code_postal`,x.`ville`, z.id,  x.`tel_struct`,x.`fax_struct`, x.`mail_struct` ,x.`page_web`
      from brut as x
      LEFT JOIN typologie as y
      ON x.typologie = y.typologie
      LEFT JOIN pays as z 
      ON x.pays = z.pays


      Merci :-)