Forums Webou.net - Hébergement gratuit et sans publicités avec PHP/MySQL

Programmation => PHP/MySQL - (x)HTML - ... => Discussion démarrée; par: nitro007 le 26 Septembre 2008, 00:20:04



Titre: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 26 Septembre 2008, 00:20:04
Bonjour, j'ai créé un script de recherche et je veux un petit coup de main.
Je fait comment une recherche sur plusieurs tables dans une base de donnée ?
Voici le select pour une table:
Code:
$query = mysql_query("SELECT * FROM table1 WHERE titre LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());

Merci de m'aider


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: Arkhena le 26 Septembre 2008, 09:31:21
Bonjour,

Il faut faire une jointure sur les tables sinon, ça va te sortir un produit cartésien et tu auras beaucoup trop de résultats...

En clair, imaginons une table véhicule avec un id_vehicule unique et un id_couleur. Imaginons une autre table couleur qui comporte un id_couleur et un label_couleur.

Pour sélectionner tous les véhicules rouges, il faudra faire :

Citation
SELECT * FROM vehicule, couleur WHERE vehicule.id_couleur = couleur.id_couleur AND couleur.label_couelur = 'rouge'

Ensuite, pour bien comprendre les tenants et aboutissants de la création de base, du requêtage avancé etc, il faudra se pencher plus en avant sur le SQL.

Cordialement,

Arkhena


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 26 Septembre 2008, 13:05:42
merci, tu est gentille  ;)
je test ca !


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 26 Septembre 2008, 13:17:15
Avant:
Code:
$query = mysql_query("SELECT * FROM articles_perso WHERE titre LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());

Après :

Code:
$query = mysql_query("SELECT * FROM articles_perso, articles_filmetjeuxvideo WHERE titre= titre.id  LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());

Ca ne mache pas  :(


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: chrmag le 26 Septembre 2008, 14:50:28
Dans ton WHERE il faudrait uiliser quelque chose du type: {table1}.{col1} = {table2}.{col2} (sachant que col1 se trouve dans table1 et col2 se trouve dans table2; par ailleurs table1 et table2 sont references dans le FROM)


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: K@cem le 26 Septembre 2008, 15:43:05
Il faudra bien comprendre les jointures avant de les utiliser ;)
Sinon si ça marche pas il faut donner l'erreur SQL ...


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 26 Septembre 2008, 22:21:11
Je sais mais dans mon cas c'est pas du facile !
Que devrai-je faire ?


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: chrmag le 26 Septembre 2008, 23:34:11
Si j'ai bien compris: tu as 2 tables (articles_perso et articles_filmetjeuxvideo) qui ont les memes colonnes et tu veux avoir les donnees d'un a la suite de l'autre?


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 26 Septembre 2008, 23:36:57
Bon dans mon formulaire de recherche http://nitro007.webou.net, je veux pouvoir rechercher des titres (d'articles) dans mes tables  articles_perso, articles_filmetjeuxvideo, articles_design et verra par la suite...
Donc je cherche dans plusieurs tables, comment faire une jointure dans mon cas ?


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: Arkhena le 27 Septembre 2008, 17:51:15
Bon dans mon formulaire de recherche http://nitro007.webou.net, je veux pouvoir rechercher des titres (d'articles) dans mes tables  articles_perso, articles_filmetjeuxvideo, articles_design et verra par la suite...
Donc je cherche dans plusieurs tables, comment faire une jointure dans mon cas ?

OK, donc en fait, tu recherches plutôt ça :

Citation
SELECT titre FROM articles_perso WHERE titre LIKE '%$requete%' ORDER BY id DESC
UNION SELECT titre FROM articles_filmetjeuxvideoWHERE titre LIKE '%$requete%' ORDER BY id DESC
UNION SELECT titre FROM articles_design WHERE titre LIKE '%$requete%' ORDER BY id DESC

Juste une remarque : apparemment, tu as une base de données qui comporte une table articles_perso, une table articles_filmetjeuxvideo et une tables articles_design. Cette base a été mal conçue. En effet, il aurait fallu créer une quatrième table articles qui comporte toutes les caractéristiques communes aux 4 autres... De ce fait, tu n'aurais pas besoin de faire des "UNION" dans ta requete. Il faut savoir que les UNION sont très coûteux en ressources.

Cordialement,

Arkhena


Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: nitro007 le 27 Septembre 2008, 19:13:36
Merci pour ta reponse mais ca marque
Code:
Incorrect usage of UNION and ORDER BY
Mais merci de m'avoir répondu, j'essayerai de régler le problème.



Titre: Re: Selectionner plusieurs table dans une base de donnée ?
Posté par: K@cem le 27 Septembre 2008, 21:30:02
J'approuve ce qu'à dit Arkhena, et j'ajoute que si tes 3 tables ont les mêmes caractéristiques tu n'as besoin en fait que d'une table ...