moteur de recherche sur plusieurs tables

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 : moteur de recherche sur plusieurs tables

par sandrine_b » 03 août 2005, 20:06

Je viens de revoir mon organisation. C'est maintenant beaucoup plus simple. merci pour les conseils.

par ouckileou » 01 août 2005, 13:01

Je vais revoir mon organisation.
excellente idée :pouce:
Je pensais que 6000 enregistrement était trop pour une table et que de séparer en plusieurs tables serait plus rapide.
surement pas ;)

par sandrine_b » 01 août 2005, 12:57

Merci pour les conseils.
Je vais revoir mon organisation. Je vais tout remettre dans une seule table. Surtout que je comptais faire une recherche sur environ 8 tables.
Je pensais que 6000 enregistrement était trop pour une table et que de séparer en plusieurs tables serait plus rapide.

par ouckileou » 01 août 2005, 12:48

Oui. C'était pour éviter d'avoir trop d'enregistrement par table. Par exemple, 6000 enregistrements, c'est raisonable pour une seule table ?
oui ça l'est.
Déjà ne compte pas en nombre d'enregistrements, mais en taille de stockage sur le disque. C'est là que tu pourrais éventuellement avoir des problèmes, mais tu as de la marge.

Une base de données c'est du stockage, rien de plus. Tu n'as pas à te préoccuper de limiter le nombre d'enregistrements, puisque tu as le langage SQL qui te permet de faire des sélections suivant des critères par exemple.

Ici tu limites le nombre d'enregistrements, mais tu va chercher sur deux tables à la fois, cela doit être bien plus coûteux en temps d'exécution.

Peu importe que tu ais 60, 6 000 ou 600 000 enregistrements dans ta table.

Par contre, il y a des méthodes pour créer une bonne structure de base de données. Cherche "Merise" par exemple.

Si tu crées une nouvelle table à chaque catégorie tu stockes à chaque fois une nouvelle fois les informations de description de la table !
Et puis si tu changes un article de catégorie, quel bazard...

Bref, prend un peu de temps pour revoir ton organisation.
En gros, on peut dire qu'une table correspond à un type d'objet "physique" de ce que tu souhaites faire, et tu peux te dire que si tu as des tables en double, et des champs qui se répétent plus de 2 fois dans une même table, c'est qu'il y a des problèmes ;)

par sandrine_b » 01 août 2005, 12:35

pas très explicites les noms de tables
En faite, mes tables ont le nom de mes catégories. Ici, c'est deux tables que j'ai créer pour faire un essai. je trouvais ca plus simple d'avoir, quand il y a besoin de les taper, des noms court pour essayer

Code : Tout sélectionner

et puis si tu rajoutes des catégories, tu rajoutes une table à chaque fois ?
Oui. C'était pour éviter d'avoir trop d'enregistrement par table. Par exemple, 6000 enregistrements, c'est raisonable pour une seule table ?

par ouckileou » 01 août 2005, 12:23

comme prévu deux remarques :)

- une petite : pas très explicites les noms de tables... pour toi et encore plus pour nous ;)
- une grosse : tu as 2 tables exactement identiques
si ce sont des articles, qui peuvent appartenir à 2 catégories (l'une ou l'autre, mais pas les deux à la fois) voici ce que tu devrais avoir :

Code : Tout sélectionner

CREATE TABLE `tb1` ( `id` int(11) NOT NULL auto_increment, `ref` longtext, `nom` longtext, `image` longtext, `descr` longtext, `motcle` longtext, `valid` longtext, `id_categorie` tinyint ----> clé étrangère vers la table Categories Categories ----------- id_categorie libelle_categorie
ça simlifierait tes requêtes... et puis si tu rajoutes des catégories, tu rajoutes une table à chaque fois ? non non non [-X

par sandrine_b » 01 août 2005, 12:19

Désolé d'avoir poster dans la mauvaise catégorie.

Voilà mes tables :

Code : Tout sélectionner

CREATE TABLE `tb1` ( `id` int(11) NOT NULL auto_increment, `ref` longtext, `nom` longtext, `image` longtext, `descr` longtext, `motcle` longtext, `valid` longtext, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE `tb2` ( `id` int(11) NOT NULL auto_increment, `ref` longtext, `nom` longtext, `image` longtext, `descr` longtext, `motcle` longtext, `valid` longtext, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
PS : Dans ma requêtes, je n'ai pas encore mis le LIKE pour le moteur de recherche. Je voudrais déjà que ca fonctionne avec la condition valid=1

par mere-teresa » 01 août 2005, 12:11

mais je soupçonne quelques problèmes de conceptions... :lol:
+1
et ce post n'a rien à faire dans PHP. Il concerne les bases de données.
Modération : bon ok, en route alors

par pjl » 01 août 2005, 12:02

mais je soupçonne quelques problèmes de conceptions... :lol:
+1
et ce post n'a rien à faire dans PHP. Il concerne les bases de données.

par ouckileou » 01 août 2005, 12:00

j'aimerai voir la structure de ta base de données, c'est dur sinon de comprendre les requêtes et de t'aider

mais je soupçonne quelques problèmes de conceptions... :lol:

mais ce que tu fais c'est un produit cartésien, c'est normal que tu ais deux fois chaque résultat

par sandrine_b » 01 août 2005, 11:59

En faite, je suis en train de faire comme une boutique en ligne et une table correspond à chaque catégorie de produit.

Je viens d'essayer ca :

Code : Tout sélectionner

$sql = "SELECT tb1.nom, tb2.nom FROM tb1,tb2 WHERE tb1.valid = '1' AND tb2.valid = '1' LIMIT 1,10; $req = mysql_query($sql); while($donne = mysql_fetch_array($req)) { echo"$donne[nom]"; }
Ca affiche 2 fois chaque résultat de la tb2 !

A moins que ca ne soit pas comme ca qu'il fasse faire ?

par ouckileou » 01 août 2005, 11:29

tout dépend de la structure

je suis déjà étonné que tu ais plusieurs tables de même structure ? quelle est la raison de ça ? :shock:

mais bon, pour sélectionner des données de plusieurs tables, il suffit de lister les tables dans le FROM, et debien préciser de quelle table proviennent les champs sélectionnés

ensuite tu peux tuiliser des jointures s'il y a des correspondances

moteur de recherche sur plusieurs tables

par sandrine_b » 01 août 2005, 11:25

Bonjour à tous !

Je souhaite faire un moteur de recherche sur mon site.
Pour cela, il faut que je fasse une recherche dans plusieurs tables (identiques au niveau structure). Je souhaiterais trier les résultats par ordre alphabétique et faire un affichage page par page (donc utiliser un LIMIT).

S'il s'agissait de faire une recherche sur une table, je saurais comment faire, mais là, il faut rechercher sur plusieurs tables en même temps et je ne vois pas du tout comment faire.

Si quelqu'un peut éclairer ma lanterne ?

Merci d'avance.
SB