recherche sur toute la base

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche sur toute la base

par Cyrano » 26 juin 2005, 19:20

:google: ... ;)
Il vous plait hein :langue:
Je te l'avais dit naholyr qu'il servirait ce truc :langue:

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

par pjl » 26 juin 2005, 19:20

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".
Histoire d'enfoncer le clou, si tu as 30 tables avec chacune un champ titre, il y a clairement un PB dans la conception.

On a tous compris que tu es à la bourre mais dans ton pb d'aujourd'hui, si tu avais eu une bonne structure, ton PB aurait été résolu en 5mn.

Je ne peux donc que t'encourager à revoir la structure de ta base avant d'aller plus loin.

par naholyr » 26 juin 2005, 18:21

Google ... ;)
Il vous plait hein :langue:

par albat » 26 juin 2005, 18:07

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

merci pour tes conseils

par blady » 26 juin 2005, 18:02

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+

par albat » 26 juin 2005, 17:56

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 ... ;)

ouah !! y a pas plus simple

par blady » 26 juin 2005, 17:27

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

par Cyrano » 26 juin 2005, 17:10

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

zut, pb de syntaxe ??

par blady » 26 juin 2005, 17:08

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

par Invité » 26 juin 2005, 16:51

Décidement, quand je fais :
SELECT * FROM table1, table2 WHERE archive = 'non'
Ca marche pas, si je mets que la première ça marche ??

par Cyrano » 26 juin 2005, 16:50

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.

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

par blady » 26 juin 2005, 16:35

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

par Cyrano » 26 juin 2005, 16:19

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

par albat » 26 juin 2005, 16:18

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.

pour vérifier la validation

par blady » 26 juin 2005, 16:01

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