Page 1 sur 2

recherche sur toute la base

Posté : 26 juin 2005, 15:42
par blady
Bonjour,
Comment on fait pour faire une recherche sur toute la base.
Je sais faire : "SELECT * ma table WHERE archive = 'non' etc...."
Mais il doit bien y avoir une syntaxe pour faire cette requête sur toutes les tables en même temps ?
Merci à vous
:?

Posté : 26 juin 2005, 15:59
par albat
Les tables ont pour but de stocker des données de natures différentes.
Si tu cherches une info, il y a un schéma de tables à utiliser.
Tu construis donc ta requête en fonction de ta recherche.

Je ne vois pas l'utilité d'une requête universelle sur toutes les tables d'une base en simultané. :shock:

pour vérifier la validation

Posté : 26 juin 2005, 16:01
par blady
Salut,
J'ai tout simpliement un champ "validation" sur toute mes tables.
Je veux afficher toues les enregistrements qui ont "oui" dans le champ "validation" et cela pour toutes les tables.
Peut-on faire un truc du genre :
Select * FROM mabase ???
Merci

Posté : 26 juin 2005, 16:18
par albat
Non.
La structure d'une requête de recherche en SQL est :
SELECT champ [, champ] FROM table [, table]
NB : champ peut être remplacé par une fonction.

Posté : 26 juin 2005, 16:19
par Cyrano
Non, on ne peut pas, albat te l'a dit, on fait une recherche dans les tables.

Cependant, je suis aussi perplexe que lui quant à la structure de ta base de données, j'ai des raisons de penser qu'il y a des redondances et une organisation des données bizarre :afraid:

Ce que tu dois faire, c'Est un SELECT... et après le FROM, tu mets toutes les tables que tu veux vérifier séparées par des virgules.

Code : Tout sélectionner

SELECT ..... FROM table_1, table_2, ..., table_n WHERE ...

bon tant pis mais tout de même...

Posté : 26 juin 2005, 16:35
par blady
Bonjour,

tant pis ! Je vais me coller une big requête.
Quand à la construction de ma base, voici le principe :
30 tables avec des données de natures différentes avec des champs pratiquement identiques notamment un champs "validation" qui contient "oui" ou "non". Je voulais tout simplement afficher, pour les 30 tables, le champs "titre" dès lors que "validation" est sur "non".
D'après ce que vous me dites, je vais devoir lister toutes les tables...
Merci tout de même pour l'info.
:?

Posté : 26 juin 2005, 16:50
par Cyrano
Si tu veux un conseil gratis: sur les trente tables, tu devrais faire une modification simple: Crée une 31ieme table "validation" avec les champs communs à ces 30 tables: dans ces dernière, supprime les champs validation et mets à la place un champ "validation_id qui correspondra à la clé primaire de ta table validation. Comme ça, tu fais les recherches sur une seule table à la base et tu fais les jointures nécessaires pour récupérer les noms dans chaque table correspondant à un oui ou un non selon ce que tu cherches.

Enfin bon, c'est une vision sommaire, il faudrait que je vois la base complète pour faire mieux.

Posté : 26 juin 2005, 16:51
par Invité
Décidement, quand je fais :
SELECT * FROM table1, table2 WHERE archive = 'non'
Ca marche pas, si je mets que la première ça marche ??

zut, pb de syntaxe ??

Posté : 26 juin 2005, 17:08
par blady
J'ai essayé comme vous dites :
$resultat=mysql_query("SELECT * FROM cinema, actualite WHERE archive = 'non'");

Mais j'ai une erreur : Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

C'est bien des virgules entre les nom de table ??
Merci

Posté : 26 juin 2005, 17:10
par Cyrano
normal, il y a ambiguïté pour MySQL, il faudrait faire quelque chose comme:

Code : Tout sélectionner

SELECT * FROM table_1 as t1, table_2 as t2 WHERE t1.archive = "non" OR t2.archive = "non";
Là, tu vas mesurer l'importance d'une modélisation de base de données différente :-k

ouah !! y a pas plus simple

Posté : 26 juin 2005, 17:27
par blady
C'est fou ça,

tout ça pour faire une recherche sur deux tables ?
Tu sais ou je peux trouver des exemples des infos, sur ce genre de syntaxe (recherche sur plusieurs tables). Dans le manuel, je comprends rien.
Merci

Posté : 26 juin 2005, 17:56
par albat
Je pense que tu rencontres deux difficultés.
Comme environ 99% des développeurs qui viennent sur ce forum pour un problème comparable... :roll:

1. Il te faut maîtriser davantage le SQL. :ordi:

Beaucoup de développeurs négligent ce point
car il faut reconnaître que le SQL est un L3G
et que ce n'est pas le langage le plus sexy qui soit...

C'est cependant injuste car il possède des atouts certains
mais qui sont rarement connus des utilisateurs
qui se limitent aux requêtes de type "SELECT".

Le SQL est beaucoup plus puissant que ça... ;)

2. Je crains que le modèle de ta base de données soit à revoir.

Une base de données n'est pas un ensemble de fichiers
dans lequel on déverse des données, selon des grilles.
Ce n'est pas une feuille Excel où donner un nom aux colonnes suffit. [-X

Une table est créée en fonction des données qu'elle recevra.
La nature (sémantique) des données est fondamentale.
On parle, en modélisation, d'entités pour les tables.

Ainsi, pour un site de vente en ligne, on crée une table pour les clients,
une pour les produits et une autre pour les commandes. Logique, non ?
Hors de question de créer une table par client pour gérer toutes ses commandes !
Pourtant, nous avons eu des exemples de ce type... :(

Je t'encourage à te plonger dans ces concepts.
Ils sont fondamentaux et te feront gagner beaucoup de temps par la suite...


Des mots tels que modélisation, merise,... devraient inspirer Google ... ;)

merci pour tes conseils

Posté : 26 juin 2005, 18:02
par blady
Tu as raison, je le sais.
Mais comme la plupart des développeurs qui viennent sur ce forum, nous avons une contrainte de taille : le temps.
Il me reste 9 jours pour finir mon développement et je t'assure que si j'avais le temps, j'étudierais bien plus à fond le php/mysql car j'adore cela.

Concernant mon problème concret, j'ai trouvé cette solution :

$resultat=mysql_query("(SELECT * FROM table1 WHERE archive = 'non' )UNION (SELECT * FROM table2 WHERE archive = 'non' ) ");

Ca va faire une longue requête, mais ça marche.
Je vais cependant, dès que possible, chercher une meilleure solution...
a+

Posté : 26 juin 2005, 18:07
par albat
Ça peut marcher, mais les UNION sont à proscrire ! :?

C'est un peu comme pour le HTML/xHTML :
il y a des trucs qui sont valides et d'autres qui le sont moins.

Sache tout de même que si un modèle de données (le coeur de l'appli) est mal conçu,
c'est toute la pérénité du travail qui est compromise.

À la première demande d'évolution, il faut tout refaire ! :oops:
Et je ne parle pas des problèmes de maintenance...

Avec les délais (toujours) trop justes, c'est l'autre cause de catastrophes des projets informatiques... :evil:

Posté : 26 juin 2005, 18:21
par naholyr
Google ... ;)
Il vous plait hein :langue: