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 :

Question sur les champs des tables


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut Question sur les champs des tables
    Bonjour, un problème se pose à moi et je n'arrive pas à le résoudre ...

    Peut-on faire une requête lorsque l'on demande que 2 champs soit égaux ?

    Je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlMail="INSERT IGNORE INTO mails_a_envoyer (email) SELECT  email FROM Info_recup WHERE 'codeClient' = 'codeClient_bis'"
    J'aimerais éxécuter cette requête SI et SEULEMENT SI les valeurs présente dans mes champs codeClient et codeClient_bis sont égales

    Cela est-il possible ?

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Que renvoi cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  email 
    FROM Info_recup 
    WHERE codeClient = codeClient_bis
    A noter qu'il ne faut pas mettre de ' autour des colonnes.

  3. #3
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    C'est le principe même des clauses SQL, pouvoir déterminer les critères de sélection.
    Donc oui c'est tout à fait possible (mais sans les ' autour des champs)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Comme en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(codeClient == codeClient_bis)
    {
      $sqlMail="INSERT IGNORE INTO mails_a_envoyer (email) values('.$email.');"
    }
    Ou autre chose ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Nan, mauvais approche.

    SQL est un langage ensembliste qui permet justement de traiter globallement des données.

    Créer du code itératif pour arrivez à vos besoin n'est pas une bonne démarche.


    Je n'arrive pas à comprendre ce que vous voullez faire ici, si on recoupe avec votre discussion sur le forum MySql.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Punkoff si vous faites référence au problème que j'ai posté hier, ce dernier est résolu sinon je ne comprend pas votre réponse ...

  7. #7
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Ce que veux dire punkoff :

    Si tu as 1 millions d'enregistrements à traiter avec une BDD alors ne fais pas un boucle qui exécute 1 million de fois 1 commande mais à l'inverse 1 commande qui traite tes 1 millions d'enregistrements d'un coup

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    En gros, si j'ai compris, je fais d'abord l'exception et après ma requête
    et non pas ma requête et après l'exception

  9. #9
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Tu entends quoi par exception ?

    L'idée c'est de faire en une instruction, l'INSERT de toutes tes adresses mails dans une table selon une (ou des) condition(s) établie(s)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    +--+-----------+---------------+------+
    | id| codeClient | codeClient_bis | email |
    +--+-----------+---------------+------+

    Voila ma table, je veux sélectionner uniquement les adresses mail ou codeClient=codeClient_bis

  11. #11
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Tu as déjà la réponse
    Cf. réponse de "monsieur" Lola06

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  email 
    FROM Info_recup 
    WHERE codeClient = codeClient_bis
    Pour les insérer dans une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO mails_a_envoyer 
      (email) 
      (SELECT  email 
      FROM Info_recup 
      WHERE codeClient = codeClient_bis);
    Pour les insérer dans une table sans les adresses déjà existantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO mails_a_envoyer 
      (email) 
      (SELECT  email E
      FROM Info_recup 
      WHERE codeClient = codeClientbis
      AND NOT EXISTS
        (SELECT 1
         FROM email
         WHERE E.email = email));

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Donc maintenant si je veux stocker ces emails dans une table qui s'appelle emails_a_envoyer je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT IGNORE INTO emails_a_envoyer (email)
    SELECT email
    FROM Info_recup
    WHERE codeClient = codeClient_bis
    Mais je crois que sa me met une erreur ...

  13. #13
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Le IGNORE est de trop, il manque des parenthèses au SELECT
    Poste les erreurs que tu rencontres ça sera plus simple pour nous de t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO emails_a_envoyer (email)
    (SELECT email
    FROM Info_recup
    WHERE codeClient = codeClient_bis)

  14. #14
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par hannibal813 Voir le message
    Donc maintenant si je veux stocker ces emails dans une table qui s'appelle emails_a_envoyer je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT IGNORE INTO emails_a_envoyer (email)
    SELECT email
    FROM Info_recup
    WHERE codeClient = codeClient_bis
    Mais je crois que sa me met une erreur ...
    Il faut enlever le IGNORE

  15. #15
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql = "INSERT IGNORE INTO Info_recup (codeClient) SELECT  codeClient FROM test_lci WHERE IdIntervention = 4";
    $sqlCodeClient_bis = "INSERT IGNORE INTO Info_recup (codeClient_bis,email)    SELECT  CodeClient,email FROM test_email_lci";
     
    mysql_query($sql) or die ('ERREUR'.$requete.mysql_error());
    mysql_query($sqlCodeClient_bis) or die ('ERREUR'.$requete.mysql_error());
     
    $rqtMail = "INSERT  INTO mails_a_envoyer (email)
    				(SELECT email
    				FROM Info_recup
    				WHERE codeClient = codeClient_bis)";
    mysql_query($rqtMail) or die ('ERREUR'.$requete.mysql_error());
    Mais ma table mails_a_envoyer ne se remplie pas ...

  16. #16
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Je vois d'ici encore quelques IGNORE dans ton code ...


    Et tu n'interceptes aucune erreur ?

    Que donne la requête SELECT seule ?
    As-tu des résultats pour ta sélection ?

  17. #17
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    - quelle est l'erreur ?
    - que renvoi votre requête sans le INSERT INTO.. ?

    [EDIT] : Décidement j'ai toujours une minute de retard.

    Les parenthèses sont à enlever car pas nécessaires et alourdissent le code.

  18. #18
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Peut-être un problème de commit ?

    Car si on regarde juste au dessus de la requête il insère les données dans code_client et code_clientbis. Si les données ne sont pas enregistrées dans la base alors il est peut-être normal que la requête n'insère rien car elle ne trouve rien !!!

    ==> A vérifier car je ne sais pas exactement comment se gère le commit.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Merci pour votre aide, j'ai tout recommencé, je n'est utilisé que 2 tables et j'ai réalisé une jointure donc mon problème est résolu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    	$jointure = "SELECT  test_email_lci.email,test_lci.id
    				 FROM test_email_lci
    				 INNER JOIN test_lci
    				 ON test_lci.codeClient = test_email_lci.codeClient
    				 WHERE test_lci.IdIntervention = 4
    				 AND test_lci.SendMail = 0";
     
     	$reponse = mysql_query($jointure) or die ('ERREUR'.mysql_error());
     
    	while ($donnees = mysql_fetch_array($reponse))
    	{
    	 $nbr_adresses_mail_valide = sizeof($donnees)-1;
    	 mail($donnees["email"], $sujet, $message, $headers);
    	 print ("Mails bien envoyes a ".$donnees["email"]." ");
            }
    Maintenant je veux actualiser ma table test_lci et mettre mes sendMail = 1
    Mais je comprend pas ou ma requête est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $maj = "   UPDATE test_lci 
    	      SET sendMail=1 
    	      WHERE test_lci.id = $donnees["id"]";
     
    $reponse = mysql_query($maj) or die ('ERREUR'.mysql_error());

  20. #20
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Ta requête semble bonne.
    Es-tu sur d'avoir quelque chose de correct dans $donnees["id"]

    Si l'ID n'existe pas ou n'est pas initialisé ton UPDATE ne retournera pas d'erreur, il ne mettra juste aucune ligne à jour.

Discussions similaires

  1. Question sur les ascenseurs des champs
    Par 42remi42 dans le forum WinDev
    Réponses: 6
    Dernier message: 22/02/2018, 08h44
  2. Question sur les champ hidden des formulaires
    Par matios dans le forum CodeIgniter
    Réponses: 3
    Dernier message: 06/08/2012, 11h50
  3. [AC-2007] Question sur les relations des tables
    Par Abed_H dans le forum IHM
    Réponses: 2
    Dernier message: 21/03/2010, 21h10
  4. Question sur les chemins des includes
    Par michka999 dans le forum Langage
    Réponses: 7
    Dernier message: 06/09/2006, 10h46
  5. Récupération des commentaires sur les champs des tables.
    Par mikef32 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/08/2006, 00h23

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