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

Langage SQL Discussion :

Select insert into values


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut Select insert into values
    Bonjour à tous,
    bon c'est vraiment brouillon mais voilà en gros ce que je voudrais faire, je sais qu'il faut un select avant mais je n'arrive pas à savoir comment insérer d'autres données statiques que mon select.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute)".
            " VALUES ('LEONIX30', '4', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France fixe et Mobile', 1, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France fixe', 2, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France Mobile',SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3))";
    $req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    echo 'requete insert SVA ok'. "\n";

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    • Que cherches tu à faire ?
    • Qu'est censé faire le code ci-dessus ?
    • Quel est ton problème ?
    • As-tu un message d'erreur ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    C'est sans doute une commande INSERT ... SELECT que tu cherches à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "INSERT INTO forfaits (forfait, forfaits_id, prefixe, destination_name, connection, prix_minute)".
            " SELECT ('LEONIX30', '4', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France fixe et Mobile', 1, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France fixe', 2, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),('Illimite France Mobile',SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3))".
            " FROM table_sva sva WHERE ...";
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Vous avez d'étranges mélanges de littéraux et de nombres dans votre clause INSERT.

    Pour résumer, vous faites (si on récupère le SQL uniquement) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute) VALUES
    ('LEONIX30', '4', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),
    ('Illimite France fixe et Mobile', 1, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),
    ('Illimite France fixe', 2, SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),
    ('Illimite France Mobile',SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3)
    Donc on a :
    SVA.prefixe : Aucune idée de ce que sont SVA et prefixe
    SVA.destination_name : Idem
    'SVA.connection'*1.3 : Là, on cherche à multiplier une chaîne de caractère par un nombre
    'SVA.prix_minute'*1.3 : Idem

    Intuitivement, je pense que SVA c'est un objet dans votre page PHP.
    Et prefixe, destination_name, connection et prix_minute des attributs de cet objet.

    Je ne connais rien à PHP, mais, je vous encourage à lire cette doc, afin de passer proprement en paramètre les attributs de votre objet à votre requête SQL :
    http://www.w3schools.com/php/php_mys...statements.asp

    Donc en gros, avec MySQLi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $stmt = $conn->prepare("INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute) VALUES ('LEONIX30', '4', ?, ?, ? * 1.3, ? * 1.3), ('Illimite France fixe et Mobile', 1, ?, ?, ? * 1.3, ? * 1.3), ('Illimite France fixe', 2, ?, ?, ? * 1.3, ? * 1.3), ('Illimite France Mobile', ?, ?, ? * 1.3, ? * 1.3)");
    $stmt->bind_param("sss", $SVA.prefixe, $SVA.destination_name, $SVA.connection, $SVA.prix_minute, $SVA.prefixe, $SVA.destination_name, $SVA.connection, $SVA.prix_minute, $SVA.prefixe, $SVA.destination_name, $SVA.connection, $SVA.prix_minute, $SVA.prefixe, $SVA.destination_name, $SVA.connection, $SVA.prix_minute);

    Et avec PDO, vous pouvez utiliser en plus des paramètres nommés, ce qui rends à la fois le SQL et le PHP plus lisibles et plus succints :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $stmt = $conn->prepare("INSERT INTO forfaits (forfaits.forfait, forfaits.forfaits_id, forfaits.prefixe, forfaits.destination_name, forfaits.connection, forfaits.prix_minute) VALUES ('LEONIX30', 4, :prefixe, :destination_name, :connection * 1.3, :prix_minute * 1.3), ('Illimite France fixe et Mobile', 1, :prefixe, :destination_name, :connection * 1.3, :prix_minute * 1.3), ('Illimite France fixe', 2, :prefixe, :destination_name, :connection * 1.3, :prix_minute * 1.3), ('Illimite France Mobile', :prefixe, :destination_name, :connection * 1.3, :prix_minute * 1.3)");
    $stmt->bindParam(':prefixe', $SVA.prefixe);
    $stmt->bindParam(':destination_name', $SVA.destination_name);
    $stmt->bindParam(':connection', $SVA.connection);
    $stmt->bindParam(':prix_minute', $SVA.prix_minute);
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Bonjour à tous, en effet j'essaye de faire un insert sélect. SVA est une table de ma base de données. préfixe / connection / prix_minute etc. sont les colonnes de cette tables; En fait pour mieux m'expliquer:
    J'ai 2 tables dans ma BDD dont voici les colonnes pour chacune
    forfaits: forfait / forfait_id / prefixe / destination_name / prix_minute / connection
    SVA: destination_id / destination_name / prefixe / prix_minute / connection

    Je voudrais que tout ce qu'il y a dans la colonne SVA.prefixe aille dans forfaits.prefixe, tout ce qu'il y a dans SVA.destination_name aille dans forfaits.destination_name, tout ce qu'il y a dans SVA.prix_minute aille dans forfaits.prix_minute et tout ce qu'il y a dans SVA.connection aille dans forfaits.connection
    + j'ai 4 forfaits différents, illimité france fixe et mobile, illimité france fixe, illimité france mobile et leonix30 dont chacun a un id différent donc en gros je veux que ça se présente comme ça à titre d'exemple

    illimité france fixe mobile 1 334 france fixe XX€ xx€
    illimité france fixe 2 334 france fixe XX€ xx€


    etc
    etc

    une destination qui se multiplie pour les 4 forfaits différents
    Je ne sais pas si je suis très claire...

    Le bout de code que j'ai marqué fonctionne pour des variables que j'ai récupéré auparavant, mais je voudrais ne pas avoir à créer de variables dans ce cas, si c'est faisable juste avec une requête sql ça serait top !

    Merci à tous et désolée pour ma réponse tardive

  6. #6
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Du coup avec vos conseil j'ai écrit ça, mais il ne trouve pas mes colonnes, je cite: "Unknown column 'SVA.prefixe' in 'field list'"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "INSERT INTO forfaits (forfait, forfaits_id, prefixe, destination_name, connection, prix_minute)".
            " SELECT (('LEONIX30', '4', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),".
            "('Illimite France fixe et Mobile', '1', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),".
            "('Illimite France fixe', '2', SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3),".
            "('Illimite France Mobile',SVA.prefixe, SVA.destination_name, 'SVA.connection'*1.3, 'SVA.prix_minute'*1.3))".
            " FROM facturation.SVA sva";
    $req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    echo 'requete insert SVA ok'. "\n";

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Tu mélanges deux syntaxes d'une requête INSERT.

    1ère syntaxe : insertion de valeurs multiples
    Il s'agit d'insérer un ou plusieurs enregistrements en précisant toutes les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO table (col1, col2) VALUES 
    (val1_col1, val1_col2),
    (val2_col1, val2_col2),
    (val3_col1, val3_col2),
    (val4_col1, val4_col2)
    2ème syntaxe : insertion via un select
    Il s'agit d'insérer un ensemble d'enregistrement qui est le résultat d'une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO table (col1, col2)
    SELECT value1, value2 FROM table2
    Ici, c'est la deuxième approche que tu souhaites.

    La requête suivante devrait répondre à tes besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO forfaits(forfait, forfaits_id, prefixe, destination_name, connection, prix_minute)
    SELECT L.forfait, L.forfaits_id, sva.prefixe, sva.destination_name, sva.connection * 1.3, sva.prix_minute * 1.3
    FROM facturation.SVA AS sva,
    (SELECT 'LEONIX30' AS forfait, '4' AS forfaits_id
     UNION
     SELECT 'Illimite France fixe et Mobile' AS forfait, '1' AS forfaits_id
     UNION
     SELECT 'France fixe' AS forfait, '2' AS forfaits_id
     UNION
     SELECT 'Illimite France Mobile' AS forfait, '3' AS forfaits_id
    ) AS L
    A noter que ta requête Illimite France Mobile ne spécifiait pas de forfaits_id. Je l'ai rajouté.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. Insert multiple (INSERT INTO ...VALUES SELECT...)
    Par acognard dans le forum Débuter
    Réponses: 7
    Dernier message: 13/05/2014, 13h42
  2. [AC-2010] Requete SQL INSERT INTO .. VALUES
    Par phoon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2012, 10h05
  3. Réponses: 4
    Dernier message: 28/04/2009, 15h12
  4. [SQL]Insert into Values
    Par Pitou5464 dans le forum Access
    Réponses: 10
    Dernier message: 07/08/2006, 12h01
  5. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

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