MySQL查询从单个表中查找相关行

时间:2017-03-14 09:13:35

标签: mysql

我在MySQL数据库中有一个附加News的表结构。

问题是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); 

但它没有帮助。 我在编写过于复杂的数据库查询方面没有太多的专业知识,任何帮助都会受到赞赏。

2 个答案:

答案 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

相关问题