Quant à utiliser une table de recherche, je suis 100% pour. (d'ailleurs iclo, si tu voulais développer "ça devient très vite l'usine à gaz" ça m'intéresse) Pour indexer le texte contenu dans la table Machin la structure des tables pourrait ressembler à: (clés primaires en gras)
Tu peux avoir une description de cette approche dans cet article de Frédéric Brouard [ Indexation documentaire & bases de données ].Table Machin
machin_id INT
machin_text TEXT
Table words
word_id INT
word_text VARCHAR(20)
Table match
machin_id INT (->Machin.machin_id)
word_id INT (->words.word_id)
Reste un problème: ce modèle ne peut servir qu'à indexer une seule table. Pour en indexer plusieurs tu dois avoir recours à une troisième table d'indexation (et modifier la seconde):
Petit exemple, pour retrouver tous les documents (posts de ton forum, bio de tes utilisateurs, description d'un produit, etc...) comportant les mots 'flan' (word_id 8) ET 'caramel' (word_id 12) tu exécuteras:Table documents
doc_id INT
doc_type ENUM('Machin', 'Truc')
foreign_id INT (->Machin.machin_id, ->Truc.truc_id) (ce champs ne peut pas être une contrainte étant donné qu'il lie la table à plusieurs autres tables)
Table match
doc_id INT (->documents.doc_id)
word_id IN (->words.word_id)
Code : Tout sélectionner
SELECT word_id, word_text
FROM words
WHERE word_text IN ('flan', 'caramel')Code : Tout sélectionner
SELECT d.doc_id, d.doc_type
FROM match m1, match m2, documents d
WHERE m1.word_id = 8
AND m2.word_id = 12
AND m2.doc_id = m1.doc_id
AND d.doc_id = m1.doc_id