Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1331 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySql) Faire un where sur un champs liste de valeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySql) Faire un where sur un champs liste de valeurs

n°1469766
blueman_82
Posté le 03-11-2006 à 10:26:45  profilanswer
 

Bonjour à tous,
J'ai une petite question concernant une requête qui doit faire un WHERE sur un champ dont la valeur est une LISTE de valeurs.
 
Voici grosso modo ma table :
TOPIC
TOPIC_ID(integer)
TOPIC_COUNTRIES(VARCHAR2)
 
Le type de valeurs dans TOPIC_COUNTRIES est une liste d'entiers séparés par une virgule : 25,36,95,23,59
 
La requête que je souhaite faire doit me permetre de sélection les enregistrements dont le TOPIC_COUNTRIES contient 95 par exemple.
Une recherche simple du style WHERE TOPIC_COUNTRIES LIKE '%95%' fonctionne... mais c'est un peu bourrin.
 
Y a plus simple ?
Pour info je tourne sous mysql

mood
Publicité
Posté le 03-11-2006 à 10:26:45  profilanswer
 

n°1469770
pikti
I’ve done worse
Posté le 03-11-2006 à 10:34:40  profilanswer
 

De toute façon à part faire des like gérant tous les cas ou des charindex, bref des opérations sur des chaines je ne vois pas bien ce que tu peux faire.
 
Ce qui est curieux c'est la table, pourquoi avoir stocké des entiers séparés par des virgules ? N'aurait-il pas été plus simple et plus avisé de stocker tous les couples topic_id / country_id ?

n°1469773
blueman_82
Posté le 03-11-2006 à 10:39:58  profilanswer
 

en fait c'est un peu plus compliqué que cela :-(
 
La table contient en fait des infos de type news, auxquelles des users peuvent s'abonner.
Donc pour ne pas avoir une table avec x fois la même news associée a un utilisateurs unique, j'ai mis pour chaque news la liste des id des users qui ont souscrits à cette news.
 
Je sais pas si je suis bien clair  :pt1cable:

n°1469774
pikti
I’ve done worse
Posté le 03-11-2006 à 10:42:11  profilanswer
 

Je ne suis pas certain de bien saisir mais je serais curieux de voir ton modèle... :)

n°1469779
blueman_82
Posté le 03-11-2006 à 10:45:39  profilanswer
 

comment je peux te fournir ça ? j'ai rien écris :(

n°1469788
pikti
I’ve done worse
Posté le 03-11-2006 à 10:56:17  profilanswer
 

Vu comme ça, j'ai l'impression que tu as un problème de conception (je peux bien sûr me tromper).
 
Mais tu n'as peut-être pas l'intention de modifier ton modèle, et pour en revenir à ta question initiale en l'état tu es obligé de travailler sur la chaine TOPIC_COUNTRIES, que ce soit avec like ou autre...
 

n°1469793
blueman_82
Posté le 03-11-2006 à 11:01:00  profilanswer
 

le soucis c'est que par exemple je recherche le ID 15, et que dans la liste il trouve 150... il va dire que c'est le meme :-(

n°1469829
pikti
I’ve done worse
Posté le 03-11-2006 à 11:31:46  profilanswer
 

d'où le problème de conception :D
 
edit : fait voir ton modèle, explique vite fait la partie que tu évoques si tu n'as rien sous la main
 
au pire si tu ne veux rien changer stocke systématiquement le séparateur avant et après chaque valeur
ex : ",15," ou ",21,15,150," et comme ça si tu recherche ta valeur entre parenthèse tu la trouveras toujours


Message édité par pikti le 04-11-2006 à 09:47:16
n°1470127
grisensko
Posté le 03-11-2006 à 15:08:32  profilanswer
 

Normalement tu serait pas suposé avoir 2 tables, plus un ensemble de lien (Liaison many/many)??? :
TOPIC
TOPIC_ID(integer)
.....
....  
 
--------------------
COUNTRIES
COUNTRIES_ID(integer)
COUNTRIES_NON(VAR_CHAR)
.....
--------------
LIEN seulement 2 champs
TOPIC_ID(integer)
COUNTRIES_ID(integer)
 
Bon alors comme ceci, pas de donner en double dans Countries, pas de donné en douple dans Topic, et une table de lien qui te permet de faire tes recherche ....
 
select t.TOPIC_ID from topic t, countries c, lien l  
where c.countries_desc = 95 and c.countries_id = l.countries_id and t.topic_id = l.topic_id

n°1470505
blueman_82
Posté le 04-11-2006 à 12:25:09  profilanswer
 

Désolé de pas avoir répondu hier, j'étais plongé dans mon code :-p
Effectivement j'étais mal parti...j'en oublie les règles de base n'importe koi lol
 
Au final j'ai effectivement créé une table intermédiaire que me fait le lien dans les autres autres, donc le soucis est résolu et même simplifié :)
 
Merci pour votre aide !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySql) Faire un where sur un champs liste de valeurs

 

Sujets relatifs
Changer les valeurs d'une liste déroulante[Php] difference entre mysql et mysqli
faire un join sur plusieurs champs à la fois?MySQL : transferer bdd chez hebergeur
Repartition Tables MySQL ardue!!! Pb archi débutant mysql !!! lol
probleme de update - Mysql - Pas de misa a jourproblème php/mysql : mysql_connect()
MySQL: Afficher le nombre d'enregistrements dans une table 
Plus de sujets relatifs à : [MySql) Faire un where sur un champs liste de valeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR