Aller au contenu

Commande SELECT pour plusieurs tables


Sujets conseillés

Posté

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 :

<?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 ?

Posté (modifié)

Voilà c'est ça Developer

En fait la variable $clef est dans un formulaire.

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

2/ Je ne vois pas de jointure sur ta requête ?

<{POST_SNAPBACK}>

J'ai omis cette partie mais je peux la mettre si cela peut t'aider à m'aider :)

Modifié par david96
Posté

Salut,

D'une part, je te conseille de coder ta variable de la sorte:

$_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:

$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

Posté

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 :D

Posté
ç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  :D

<{POST_SNAPBACK}>

Pas tres claires tes explications ... peux-tu donner plus d'infos?

Posté

Le bug vient en premier lieu de nos neurones, ne crois-tu pas...? ;)

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

Posté (modifié)

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:

Modifié par david96
Posté (modifié)

Je reve ou c'est exactement le meme post que le precedent? :wacko:

... effectivement y'a eut bug ...

Modifié par -ZN-
Posté

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?

Posté
Qu'entends-tu par "une variable qui fait des recherches dans une autre table"?

<{POST_SNAPBACK}>

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:

Posté

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?

Posté

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:

Posté
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?

Posté
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:

 
AND table_departement_id=table4.departement_id

xpatval

Posté (modifié)

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 :D

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

Au fait xpatval pourquoi tu tiques sur mon code :huh:

Modifié par david96
Posté
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:

AND table.departement_id=table4.departement_id au lieu de 
AND table_departement_id=table4.departement_id

xpatval

Posté (modifié)

J'avoue qu'à force d'éditer, mes neuronnes crament aussi vite qu'une pauvre cigarette. :fou:

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')

);

Modifié par david96
Posté

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

Posté
Je serais bien incapable de te dire si ta solution est bonne, sans connaître ton modèle de conception.

Tout pareil :lol:

impossible de juger sans l'analyse qui va avec ...

Posté (modifié)

Bâ écoutez j'ai mis en pratique cette solution et ça marche nickel. :D

Modifié par david96

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...