【问题标题】:MySQL query to find related rows from single tableMySQL查询从单个表中查找相关行
【发布时间】:2017-03-14 09:13:35
【问题描述】:

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

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

但它没有帮助。 我在编写过于复杂的数据库查询方面没有太多专业知识,我们将不胜感激。

【问题讨论】:

  • 将值存储为 CSV 是非常糟糕的数据库设计。
  • 实际值在 db 中,我只是复制到 excel 以最小化 db 列并为简单起见
  • 我认为,数据没有存储在csv-file 中。这应该比在 MySQL 中更容易地表示数据
  • 请发布你的表结构
  • 我想,这个问题可以这样回答:Where field contains A or B

标签: mysql


【解决方案1】:

用 find_in_set_extra 创建一个新的函数名

BEGIN
DECLARE limitCount INT DEFAULT 0;
DECLARE counter INT DEFAULT 0;
DECLARE res INT DEFAULT 0;
DECLARE temp TEXT;
SET limitCount = 1 + LENGTH(inputList) - LENGTH(REPLACE(inputList, ',',''));
simple_loop:LOOP
SET counter = counter + 1;
SET temp = SUBSTRING_INDEX(SUBSTRING_INDEX(inputList,',',counter),',',-1);
SET res = FIND_IN_SET(temp,targetList);
IF res > 0 THEN LEAVE simple_loop; END IF;
IF counter = limitCount THEN LEAVE simple_loop; END IF;
END LOOP simple_loop;
RETURN res;
END<

使用此功能,您可以找到类似的数据

find_in_set_extra('a,b,c','b,c')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多