Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 12h18   #1
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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!!
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 12h30   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Une requête avec une clause NOT IN suffirait:
Code :
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);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 13h49   #3
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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.
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 14h36   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/05/2011, 14h48   #5
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Ok.
Sauf que lorsque j'execute cette requête, MySQL me dit qu'il ne connaît pas t1.id
Code :
1
2
3
MySQL a répondu: 
 
#1054 - Unknown column 't1.id' in 'field list'
Si je L'enlève, j'ai:
Code :
1
2
3
MySQL a répondu: 
 
#1054 - Unknown column 't1.id' in 'on clause'
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h12   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
C'était un exemple. Tu dois évidement l'adapter à la structure de ta table.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 13h53   #7
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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?
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 14h04   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
#1054 - Unknown column 't1.id' in 'field list'
C'est que ta table n'a pas de colonne nommée `id` c'est tout.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 14h35   #9
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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...
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h12   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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.

Citation:
mais je travaille en même temps sur ce champ là.
Comment ça ??
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 13/05/2011, 10h05   #11
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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 :
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>";
?>
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 12h23   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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>";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 13h57   #13
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
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
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h08   #14
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h18   #15
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Oui, sauf que les page sont soit dans db1.tbl1 soit dans db2.tbl2 (archivage de db1.tbl1).
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h19   #16
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Dans ce cas, tu peux faire une union.
Code :
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h53   #17
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mai 2011
Messages : 9
Points : 0
Points : 0
Super, ça marche dans PhpMyAdmin!!
Mais pas dans mon programme en php... mais je pense savoir pourquoi!

Merci beaucoup Benjamin!!
thomytom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web