Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/06/2011, 10h50   #1
Invité de passage
 
Inscription : septembre 2009
Messages : 39
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 39
Points : 0
Points : 0
Par défaut aide pour une requête

Bonjour je vous écris car j'ai un problème de requête plus que complexe et pour lequel je ne trouve pas de solution =((
aussi, j'ai grand besoin de votre aide et je remercie d'avance toutes les bonnes âmes qui voudront bien m'aider

je vous explique mon problème
à la base j'ai un filtre pour rechercher des dvd par genre (horreur, action...)
Comme je suis dépendante de catalogue produits qui n'ont jamais les mêmes titres pour une catégorie, j'ai donc créé une table de référence genreRef qui a pour champs : id + typeFilm

Nom de la table : genreRef
Nom du champ : typeFilm


Code :
1
2
3
4
5
6
7
8
9
10
11
typeFilm : 
Fantastique / Science Fiction
Action / Aventure
Policier / Thriller
Horreur
Comédie
Animation Jeunesse
Sport
Drame
Arts Martiaux
......
de l'autre coté j'ai une table dvd qui contient toutes les infos de mes films et leur genre en pagaille =(
le champ qui contient ces infos s'appelle : genre

Nom de la table : dev
Nom du champ : genre

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
genre : 
Action
Action - Aventure
Action - Aventure - Comedie
Action - Aventure - Espionnage
Action - Comedie
Action - Drame
Action - Espionnage
Action - Espionnage - Comédie
Action - Fantastique
Action - Fantastique - Aventure
Action - Fantastique - Policier
Action - Guerre
Action - Kung Fu
à la base je gérais mon filtre de recherche avec la requête suivante :


Code :
SELECT  typeFilm FROM genreRef, dvd WHERE genre= typeFilm
mais bien sûr il ne trouve presque rien =(

ma question : est ce qu'il existe une requête pour faire une espèce de like sur un champ et non une valeur


Code :
SELECT  typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

si non, =( quelqu'un pourrait il me dire ce que je dois faire =(

merciiii
kairi084 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 11h27   #2
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
Salut,

Tu dois pouvoir faire quelque chose comme cela :
Code :
SELECT  typeFilm FROM genreRef, dvd WHERE genre LIKE '%'||typeFilm||'%'
ou
Code :
SELECT  typeFilm FROM genreRef, dvd WHERE genre LIKE CONCAT('%',typeFilm,'%')
@+.
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 11h36   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Bonjour

Oui, les requêtes LIKE existent et notamment celle que tu présentes.
Citation:
SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'
Si tu l'avais utilisée, tu l'aurais vu par toi même. Mais les performances de ce type de requêtes ne sont pas top.


Il est clair que tu as un petit problème dans la structure de ta table.
Il serait plus judicieux d'avoir une table des genres (n'en contenant qu'un à la fois)
Citation:
...
Action - Comedie
Action - Drame
Action - Espionnage
...
plus comme cela
Citation:
Action
Comedie
Drame
Espionnage
...
Et avoir une table associant les films à son ou ses genres (soit 2 colonnes)

Citation:
Identifiant_Film
Identifiant_Genre
Cela te permettrait de faire des recherches sur les films en utilisant les genres de manière bien plus rapide

a+
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 01/06/2011, 11h43   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Une autre solution serait de revoir la conception de votre schéma qui m'a l'air bancal.

Idéalement il vous faudrait des tables de référence :
Par exemple
T_GENRE_GEN (id, nom, ....)
1, 'Action'
2, 'Aventure'
3, 'Comedie'
etc,


Et une relation entre votre table dvd et cette table qui aura une cardinalité du type (MCD) :
DVD 1, n ------- 0,n T_GENRE_GEN

voir la suivante si vous avez la possibilité de saisir un dvd ans lui attribuer de genre :
DVD 0,n ------- 0,n T_GENRE_GEN

Quand vous passerez au mpd ceci va se traduire par une création d'une autre table entre ces deux premières tables (pour pouvoir satisfaire cette relation)

Et là vous n'aurez pas à utiliser de like, et beaucoup de vos requêtes de recherche seront désormais très faciles à utiliser (et plus performantes par la même occasion).

Bref, si vous voulez fixer votre schéma allez faire un tour du côté du forum de modélisation qui regorge d'exemple pour votre cas actuel.


edit : pris de vitesse par dehorter olivier
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 06h51   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

En effet vous ne pourrez profiter d'aucun indexe.


Votre modélisation est a revoir.

Une bonne modélisation= de bonne performance et des requêtes simple a exprimer... et donc à écrire.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 06h52   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

Normal votre 'jointure' sans prédicat?(pas de liaison entre les tables genreRef et dvd)?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h56.


 
 
 
 
Partenaires

Hébergement Web