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 :

Balise <SELECT> et choix des <OPTION> [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut Balise <SELECT> et choix des <OPTION>
    Bonjour à tous,

    J'ai 2 tables dans une base, ainsi qu'une 3ème table qui est dans une autre base.
    Je souhaiterai pouvoir sélectionner chaque ligne des 2 premières tables dans une même balise <SELECT><OPTION> pour pouvoir compléter un formulaire, mais que si l'une de ces lignes existent aussi dans la table n°3, alors, on ne doit pas pouvoir la selectionner.

    Est-ce possible? et si oui, comment?

    Merci de vos réponses, et j'espère avoir été assez clair!!

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Une requête avec une clause NOT IN suffirait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.id, t1.name, t2.name 
    FROM db1.table1 AS t1
    JOIN db1.table2 AS t2 ON (t1.id=t2.table1_id)
    WHERE t1.name NOT IN (SELECT name FROM db2.table3);

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Merci pour ce réponsze super rapide
    Mais il reste quelques petits détails que je ne comprends pas:
    • Qu'est ce que vous entendez par "t1" et "id"?
    • table1 correspond au nom de ma 1ère table,...
    • db1 au nom de la Base de donnée n°1,...
    • mais t1, t2, et t3, je ne vois pas à quoi ils correspondent.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    t1 et t2 (il n'y a pas de t3) sont des alias qui évitent de réécrire systématiquement db1.table1 devant chaque nom de champ, ce n'est pas nécessaire mais ça apporte plus de lisibilité à la requête. Les alias son surtout utiles dans les cas où comme dans l'exemple, deux tables on un champ de même nom (le champ name).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Ok.
    Sauf que lorsque j'execute cette requête, MySQL me dit qu'il ne connaît pas t1.id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MySQL a répondu: 
     
    #1054 - Unknown column 't1.id' in 'field list'
    Si je L'enlève, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MySQL a répondu: 
     
    #1054 - Unknown column 't1.id' in 'on clause'

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'était un exemple. Tu dois évidement l'adapter à la structure de ta table.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Je sais bien que c'est un exemple mais si si je comprends bien le code, t1 n'est définis qu'après. Donc comment peut-il être appelé avant, quelque soit son nom?

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est lors de la compilation de la requête que MySQL remplace les alias par leurs valeurs réeles.

    Regarde la doc pour en savoir plus.

    Si tu as cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 't1.id' in 'field list'
    C'est que ta table n'a pas de colonne nommée `id` c'est tout.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    J'ai une colonne NUMERO qui fait office d'id, mais je travaille en même temps sur ce champ là. ça fais peut être des interférences...

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'ai une colonne NUMERO qui fait office d'id
    Dans ce cas, si tu as gardé t1 comme alias pour ta première table, la syntaxe sera t1.NUMERO.

    mais je travaille en même temps sur ce champ là.
    Comment ça ??

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    En fait je fais des traitements sur des pages qui sont identifiées par un numéro, dans la base de données, et par l'utilisateur. Le champ NUMERO me sert de clé pour la base de donnée, et de moyen de recherche pour l'utilisateur.
    Chaque page est enregistrée dans une 1ère table de la base de donnée 1, puis après un certain moment, elle est archivée dans une 2nd table de la base de donnée 1.

    En tant qu'administrateur, je sélectionne l'une de ces pages, la traite, et lorsque le traitement est fini, je saisie dans la table 3 de la base de donnée 2 que la page a été traitée.

    Puis, lorsque je ferai un nouveau traitement sur une page, je ne veux pas que la page traitée précédement soit visible dans la balise <SELECT><OPTION>.

    Voici le début de code que j'ai. Mais je l'ai deux fois pour afficher les deux possibilité de traitements (page en cours, ou celles archivées) et je ne voudrais avoir qu'un cadre de sélection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    echo "<SELECT   name='choix_page'>";
    echo "<option value='N°'>".'N°';
    $mysql_result = mysql_query("SELECT * FROM page ORDER BY NUMERO DESC") ;
    while ($ligne = mysql_fetch_array($mysql_result)){
    echo "<option>"."$ligne[NUMERO]";
    }
    echo"	</SELECT>";
    ?>

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ton code HTML produit est incorrect. Tu utilise HTML 4/5 ou XHTML ?

    Pour XHTML, ça nous donne quelque chose dans ce goût:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo "<select name='choix_page'>";
    echo "<option>n°</option>";
     
    // Pour formater correctement ta requête il me faut la description de la table
    // tu peux l'obtenir en faisant > desc page; dans mysql
    if ($mysql_result = mysql_query("SELECT * FROM page ORDER BY NUMERO DESC")) {
      while ($ligne = mysql_fetch_array($mysql_result)){
        echo "<option value=\"{$ligne[NUMERO]}\">{$ligne[NUMERO]}</option>";
      }
    }
    echo"	</select>";

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Voici:
    NUMERO int(11) NO PRI NULL auto_increment
    DATE varchar(10) NO
    NOM varchar(8) NO
    DOMAINE text NO
    CONTACT text NO
    URGENCE text NO
    PROBLEME text NO
    DESCRIPTION text NO
    REPONSE text NO
    DUREE text NO
    STATUT text NO
    FLAG int(11) NO 0
    PEC int(11) NO 0
    ATTACHED int(11) NO 0
    Les 2 tables table1 et table2 ont cette structure, et la table3 n'a que NUMERO DOMAINE DESCRIPTION, REPONSE

  14. #14
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Donc, si j'ai bien compris, tu veux une requête qui te permet d'obtenir les pages contenues dans db1.tbl1 qui sont également dans db2.tbl2 et qui n'ont pas été traitées (absentes de db2.tbl3). Je me trompe ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Oui, sauf que les page sont soit dans db1.tbl1 soit dans db2.tbl2 (archivage de db1.tbl1).

  16. #16
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Dans ce cas, tu peux faire une union.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT `NUMERO`, `NOM` FROM `db1`.`tbl2` WHERE `NUMERO` NOT IN (SELECT `NUMERO` FROM `db2`.`tbl3`)
    UNION DISTINCT 
    SELECT `NUMERO`, `NOM` FROM `db1`.`tbl1` WHERE `NUMERO` NOT IN (SELECT `NUMERO` FROM `db2`.`tbl3`)
    ORDER BY `NUMERO` DESC

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Super, ça marche dans PhpMyAdmin!!
    Mais pas dans mon programme en php... mais je pense savoir pourquoi!

    Merci beaucoup Benjamin!!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/06/2014, 18h27
  2. [HTML 4.0] [Syntaxe] Choix des balises
    Par dominos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/11/2011, 16h03
  3. [CR 8.5] Graphique : choix des couleurs dans camembert ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 22/03/2005, 09h17
  4. choix des types
    Par cali dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/08/2004, 13h16
  5. Optimisation -> choix des services à activer
    Par infotron dans le forum Mandriva / Mageia
    Réponses: 20
    Dernier message: 25/05/2004, 12h57

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