问题是id = 1,我有标签列中的AI,BOTS等标签。所以当我用id = 1查询时,我需要获取包含AI或BOTS的所有行。因此输出将是id = 1,id = 3和id = 4的行。 同样,如果我用id = 4查询,我应该得到第1行和第4行。
我尝试了查询
Select * From news where tags in (select tags from news where id=1);
但它没有帮助。 我在编写过于复杂的数据库查询方面没有太多的专业知识,任何帮助都会受到赞赏。
答案 0 :(得分:1)
使用find_in_set_extra
创建一个新的函数名称BEGIN<br>
DECLARE limitCount INT DEFAULT 0;<br>
DECLARE counter INT DEFAULT 0;<br>
DECLARE res INT DEFAULT 0;<br>
DECLARE temp TEXT;<br>
SET limitCount = 1 + LENGTH(inputList) - LENGTH(REPLACE(inputList, ',',''));<br>
simple_loop:LOOP<br>
SET counter = counter + 1;<br>
SET temp = SUBSTRING_INDEX(SUBSTRING_INDEX(inputList,',',counter),',',-1);<br>
SET res = FIND_IN_SET(temp,targetList);<br>
IF res > 0 THEN LEAVE simple_loop; END IF;<br>
IF counter = limitCount THEN LEAVE simple_loop; END IF;<br>
END LOOP simple_loop;<br>
RETURN res;<br>
END<br>
使用此功能,您可以找到
等数据find_in_set_extra('a,b,c','b,c')
答案 1 :(得分:-1)
正如Jens评论的那样,标签为csv是一个坏主意。更好的设计是将标记放在一个单独的表中,外键引用news
表。所以对你的例子来说:
news_id|tag
-------|-------
1 |AI
1 |BOTS
2 |Robotics
等