A voir également:
- Php/MySQL Recherche d'images par mots-clés
- Google recherche par image - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche musique - Guide
- Recherche adresse - Guide
- Des images - Guide
2 réponses
Posotaz
Messages postés
489
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
225
2 oct. 2007 à 22:17
2 oct. 2007 à 22:17
Salut Supersoub,
Comme ça sur le tas je verrais une solution avec 1 seule table et une autre avec 5 :
=> 1 table : champs (url, motscle, categories, styles)
Les champs motscle, categories et styles contiendraient plusieurs valeurs séparées par des ";".
Le problème c'est que ça rompt l'esprit de l'intégrité référentielle.
=> 5 tables :
-> Table images : champs(url, motscle) Oui je mettrais quand même les mots clé séparés par des ";" dans la même table parce que ce n'est pas possible de définir tous les mots clés de manière unique dans une table spécialisée (ça reviendrait à reprendre le dictionnaire de la langue française et plus encore).
-> Table categories : champs(id, nom)
-> Table styles : champs(id, nom)
-> Table cat_images : champs(images.url, categories.id)
-> Table sty_images : champs(images.url, styles.id)
Les deux dernières tables étant des tables de relation liant la première (images) aux deux suivantes (categories et styles).
Voilà comment j'aurais fait la structure personnellement. La requête devrait se faire en une seule fois. Par exemple tu veux les images ayant pour :
- mots clé : gsm, siemens
- catégories : technologie, mobile
- style : moderne
La requête devrait ressembler à :
select url
from images i, categories c, styles s, cat_images ci, sty_images si
where c.id = ci.id
and s.id = si.id
and i.url = ci.url
and i.url = si.url
and c.nom in('technologie', 'mobile') // Ici c'est plutôt un OR
and s.nom like '%moderne%'
and i.motscle like '%gsm%'
and i.motscle like '%siemens%'
On a bien 5 table et 4 jointures, le reste étant des conditions de recherche à construire dynamiquement par programmation en fonction des choix de l'utilisateur. Maintenant je ne sais pas si c'est vraiment optimal, je n'ai jamais eu à faire ce genre de moteurs de recherche personnalisé et multi critères. Mais bon courage !
Comme ça sur le tas je verrais une solution avec 1 seule table et une autre avec 5 :
=> 1 table : champs (url, motscle, categories, styles)
Les champs motscle, categories et styles contiendraient plusieurs valeurs séparées par des ";".
Le problème c'est que ça rompt l'esprit de l'intégrité référentielle.
=> 5 tables :
-> Table images : champs(url, motscle) Oui je mettrais quand même les mots clé séparés par des ";" dans la même table parce que ce n'est pas possible de définir tous les mots clés de manière unique dans une table spécialisée (ça reviendrait à reprendre le dictionnaire de la langue française et plus encore).
-> Table categories : champs(id, nom)
-> Table styles : champs(id, nom)
-> Table cat_images : champs(images.url, categories.id)
-> Table sty_images : champs(images.url, styles.id)
Les deux dernières tables étant des tables de relation liant la première (images) aux deux suivantes (categories et styles).
Voilà comment j'aurais fait la structure personnellement. La requête devrait se faire en une seule fois. Par exemple tu veux les images ayant pour :
- mots clé : gsm, siemens
- catégories : technologie, mobile
- style : moderne
La requête devrait ressembler à :
select url
from images i, categories c, styles s, cat_images ci, sty_images si
where c.id = ci.id
and s.id = si.id
and i.url = ci.url
and i.url = si.url
and c.nom in('technologie', 'mobile') // Ici c'est plutôt un OR
and s.nom like '%moderne%'
and i.motscle like '%gsm%'
and i.motscle like '%siemens%'
On a bien 5 table et 4 jointures, le reste étant des conditions de recherche à construire dynamiquement par programmation en fonction des choix de l'utilisateur. Maintenant je ne sais pas si c'est vraiment optimal, je n'ai jamais eu à faire ce genre de moteurs de recherche personnalisé et multi critères. Mais bon courage !