2010-09-21 4 views
0

j'ai deux tables de MySQL qui sont reliés entre eux et je dois montrer ma liste de catégorieen montrant concaténation mysql correcte

table_stories

sid || title || time  || hometext || associated 
1  || test || 2010-07-19 || text---- || 8-14- 

table_topics

topicid  || topicname || slug 
1   || car  || car 
4   || wall  || wall 
8   || benz  || benz 
14   || ford  || ford 

maintenant si j'utilise cette requête pour récupérer la liste des histoires:

LEFT JOIN table_topics AS nto ON 
(CONCAT(' ',COALESCE(ns.associated,'-'),'-') LIKE CONCAT('%',nto.topicid,'-%')) 

puis sortie montrerait des histoires à thème id: 8, 4, 14

vous voyez qu'il compte sujet id aussi similaire que

s'il vous plaît concider que je ne peux pas changer la structure de la table mysql et je devrais trouver un travail autour de ce problème

+0

Quelque chose comme l'ajout d'un « - » avant CONCAT et le remplacement du premier « % » avec « % -'... – pascal

+0

si je remplace première% avec% - alors l'id de sujet 8 ne sera pas lu car il n'y a pas - avant cela, vérifiez le schéma de table_stories et le champ associé –

Répondre

2

utiliser une combinaison des fonctions FIND_IN_SET et REPLACE:

LEFT JOIN table_topics AS nto ON FIND_IN_SET(nto.topicid, REPLACE(ns.associated, '-', ',')) 
+0

solution parfaite –

+1

... pour un schéma de base de données bizarre ;-) – zerkms

+0

ouais, je suis d'accord: D –

0

Procédez comme suit: Split associé à '-', vérifiez si l'ID de sujet est IN dans le tableau résultant.