【问题标题】:How to select distinct keywords from database without specifying any keywords如何在不指定任何关键字的情况下从数据库中选择不同的关键字
【发布时间】:2015-10-27 19:15:30
【问题描述】:

我在数据库列中保存了更多用逗号分隔的关键字 例如:aaaa、bbbb、cccc ....

有很多行:

例如: 第 1 行 = aaaa, bbbb 第 2 行 = aaaa,cccc,ddddd.. 等等

我想获得一个包含所有不同关键字的数组(不重复)。

提前谢谢你!

【问题讨论】:

  • 听起来你会想要从 PIVOT 或 UNPIVOT 函数的结果中选择 DISTINCT。在这些术语上进行一些谷歌搜索可能会有用。
  • 在 SQL 中?你用的是什么数据库?

标签: distinct keyword


【解决方案1】:

创建表:

CREATE TABLE tablename (
  id INT,
  name VARCHAR(20));

INSERT INTO tablename VALUES
(1, 'aaaa,bbbb'),
(2, 'aaaa,cccc,dddd');

CREATE TABLE numbers (
  n INT PRIMARY KEY);

INSERT INTO numbers VALUES (1),(2),(3),(4),(5),(6);

触发查询:

SELECT group_concat(name) as result
FROM
(
SELECT distinct name 
FROM
(
SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
FROM
  numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name)
     -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
ORDER BY
  id, n
) tab1
) tab2;

【讨论】:

  • 我不知道为什么,但你的例子对我不起作用。
  • 你用的是什么数据库,这个是在mysql上测试的?
  • 我不知道为什么,但你的例子对我不起作用。要么您不理解我想要的结果,要么我错误地编辑了您的示例。您能否更详细地向我解释您给出的示例?我的表名:jobs_details 我的列名:keywords 我没有每行注册单词的确切数量,一行可以有两个关键字(例如:aaaa、ddddd),另一行可以有四个(例如:aaaa、bbbb、 gggg, kkkkk) 和结果我想成为一个像下面这样的数组:array(aaaa,bbbb,dddd,gggg,kkkkk);所有不同的词
  • 好的,现在试试编辑后的答案,它会为你工作。
  • 现在可以使用了,谢谢!我做了一些更改,我正在使用 TRIM 排除单词之间的空格以使单词具有 100% 不同,并且还删除了“group_concat”,因为我想要一个包含每个单词的数组和每个单词的索引(我为此使用了 foreach)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-12
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多