Version complète: sur le forum Webmaster Hub : Commande SELECT pour plusieurs tables
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
david96
J'ai créée plusieurs tables (13). Je n'ai pas eu de mal à faire les jointures, par contre j'ai un petit problème avec la commande SELECT effectivement :

CITATION
<?php

$_POST["clef"]="exemple";


$requete="SELECT table1_nom, table2_nom, table3_nom

FROM table1, table2, table3

WHERE

table1_nom LIKE ('$_POST[clef]')
AND table2_nom LIKE ('$_POST[clef]')
AND table3_nom LIKE ('$_POST[clef]')";

?>


Voilà donc le problème et qu'apparement la variable $_POST["clef"] ne peut être attribuée qu'à une table.
Comment faire en sorte qu'elle soit active pour toutes les tables ?
Compte supprimé
1/ Pourquoi diable veut tu définier la variable $_POST["cle"] ?
Elle est normalement définie automatiquement sur un formulaire de type POST.

2/ Je ne vois pas de jointure sur ta requête ?
Developer
Je pense qu'il l'a définie juste pour montrer l'exemple.
david96
Voilà c'est ça Developer
En fait la variable $clef est dans un formulaire.
<input type="text" name="clef">

CITATION(jeroen @ samedi 02 avril 2005, 11h04)
2/ Je ne vois pas de jointure sur ta requête ?
*

J'ai omis cette partie mais je peux la mettre si cela peut t'aider à m'aider smile.gif
xpatval
Salut,

D'une part, je te conseille de coder ta variable de la sorte:
CODE
$_POST['cle'] = "exemple"; au lieu de:
$_POST["cle"] = "exemple";


D'autre part, pourquoi utiliser le LIKE, alors que le = suffirait, dans ton exemple ?

De plus, il vaudrait mieux écrire ta requête de cette façon:
CODE
$requete="SELECT table1_nom, table2_nom, table3_nom

FROM table1, table2, table3

WHERE

table1_nom = '". $_POST['clef'] ."'
AND table2_nom = '". $_POST['clef'] ."'
AND table3_nom = '". $_POST['clef'] ."'";


xpatval
david96
Merci mais toujours le même blème.

On va décortiquer vite fait sans rentrer dans les détails

page1.htm
<form action="page2.php" method="POST" >

<input type="text" name="clef" >

<input type="submit">

</form>


page2.php
$requete="SELECT table1_nom, table2_nom, table3_nom

FROM table1, table2, table3

WHERE

table1_nom = '". $_POST['clef'] ."' ;


ça marche, par contre pour le reste : NON !
Comment procéder ???
j'ai essaier avec OR à la place de AND .
Je ne vous dit pas le BUG biggrin.gif
-ZN-
CITATION(david96 @ samedi 02 avril 2005, 16h23)
ça marche, par contre pour le reste : NON !
Comment procéder ???
j'ai essaier avec OR à la place de AND .
Je ne vous dit pas le BUG  biggrin.gif
*



Pas tres claires tes explications ... peux-tu donner plus d'infos?
xpatval
Le bug vient en premier lieu de nos neurones, ne crois-tu pas...? wink.gif

Le champ dans tes différentes tables comportent-ils bien la valeur demandée ?

As-tu tenté d'effectuer la requête directement dans phpmyadmin ?


xpatval
david96
Bon Ok je vais tenter d'être plus clair.

Je vous met carrèment ce qu'on peut trouver pour cette requete de recherche par mot Clef

page2.php

$requete="SELECT table_code, table2_nom, table2_logo, table3_nom, table4_nom, table5_nom, table6_nom, table_intitule, table7_nom, table_experience, table_salaire, table_profil, table2_adresse, table2_telephone, table2_fax, table2_email, table2_site, table_condition

FROM table, table2, table3, table4, table5, table6, table7

WHERE

table5_nom LIKE '".$_POST['clef']."'

AND tabe.offre_collectivite_id=table2.collectivite_id
AND table.offre_contrat_id=table7.contrat_id

AND table.offre_region_id=table3.region_id

AND table_departement_id=table4.departement_id

AND table.offre_rubrique_id=table5.rubrique_id


AND table.offre_cadre_id=table7.cadre_id

";

Comme ça cela marche. Par contre si je veux que la variable ($clef) fasse aussi des recherches dans les autres tables, ça ne marche plus wacko.gif
-ZN-
Je reve ou c'est exactement le meme post que le precedent? wacko.gif

... effectivement y'a eut bug ...
david96
:-D Désolé, c'est bon j'ai édité
-ZN-
C'est un copier/coller de ton script? (au cas ou , y'a une faute de frappe: tabe.offre_collectivite_id=table2.collectivite_id)

Qu'entends-tu par "une variable qui fait des recherches dans une autre table"? que tu veux verifier que

table1.clef= $clef
table1.clef = table2.clef
table2.clef = table3.clef
etc?
david96
CITATION(-ZN- @ samedi 02 avril 2005, 17h02)
Qu'entends-tu par "une variable qui fait des recherches dans une autre table"?
*

Ce que je veux dire c'est que dans la cellule ou il y a $clef (dans la page1.htm du formulaire). que le mot taper par exemple "Culturel" aille vérifier aussi bien dans la table tabe.rubrique que dans la table table.cadre. etc...

J'espère être clair. unsure.gif
-ZN-
Ben
table1.clef= $clef
AND table2.clef = $clef
AND table3.clef = $clef

ca marche pas a partir du moment ou ton l'attribut clef est declare dans toutes les tables?

pas de probleme de majuscules ou de frappe?
david96
Aucune faute de frappe j'ai mainte fois vérifié.
Ton truc ne marche pas cela revient au même que précédemment.
Si je met par exemple le mot clef "culturel" il ne le trouve pas alors qu'il se trouve dans la table2 mais pas dans la table3. Hmmm... wacko.gif
-ZN-
CITATION(david96 @ samedi 02 avril 2005, 18h45)
mais pas dans la table3.


ben s'il existe pas dans table3 c'est normal qu'il ne retourne rien puisque tu fais une jointure... Es-tu sur d'avoir bien concu ta base?
xpatval
CITATION
Si je met par exemple le mot clef "culturel" il ne le trouve pas alors qu'il se trouve dans la table2 mais pas dans la table3.

ALors c'est tout à fait normal que ta requête ne ramène aucune donnée.

l'as-tu effectué directement dans phpmyadmin ?

De plus, à moins que ce ne soit qu'une faute de frappe, cette ligne me paraît erronée:
CODE

AND table_departement_id=table4.departement_id



xpatval
david96
Je ne pensais pas que les jointures empêcheraient cela.
Bon je vais créer une table spécial mots clefs, comme ça plus de souci biggrin.gif

En tous cas merci à tous pour votre aide et votre patiente.

Au fait xpatval pourquoi tu tiques sur mon code huh.gif
xpatval
CITATION
Au fait xpatval pourquoi tu tiques sur mon code


Parce qu'à la vue de ton code, j'imaginais qu'il s'agissait aussi d'une jointure:
CODE
AND table.departement_id=table4.departement_id au lieu de
AND table_departement_id=table4.departement_id


xpatval
david96
J'avoue qu'à force d'éditer, mes neuronnes crament aussi vite qu'une pauvre cigarette. IMSTP6.gif

Que penses tu de ma solution (Créer une table dédié aux mots clefs) ?

requête SQL:

CREATE TABLE 'mot_clef'
(
'mot_clef_id' INT( 8 ) NOT NULL AUTO_INCREMENT ,
'mot_clef_nom' VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( 'mot_clef_id' ) ,
UNIQUE ('mot_clef_nom')
);
xpatval
Je serais bien incapable de te dire si ta solution est bonne, sans connaître ton modèle de conception.
La seule idée que je puisse émettre, c'est que si le champ "cle" est déjà un idex dans une table spécifique, et que ce champ est reconduit dans plusieurs autres tables, l'une des facilité est de créer une table de jointure, mais comme dit au départ, difficile de se faire une idée comme cela.

xpatval
-ZN-
CITATION(xpatval @ dimanche 03 avril 2005, 10h38)
Je serais bien incapable de te dire si ta solution est bonne, sans connaître ton modèle de conception.


Tout pareil laugh.gif

impossible de juger sans l'analyse qui va avec ...
david96
Bâ écoutez j'ai mis en pratique cette solution et ça marche nickel. biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.