【问题标题】:MySQL: How can I return the array length of concatenated data stored in a column with MySQL?MySQL:如何返回存储在 MySQL 列中的连接数据的数组长度?
【发布时间】:2018-09-09 12:48:36
【问题描述】:

我将数据存储在表中名为 supervisors_id 的列中。该列数据结构如下:12,44,55,32,85,75,45。所以我想连续获取 supervisors_id 列中的 ID 总数。我的预期结果,例如在上面的例子中应该是 7。如何使用 MySQL 查询来做到这一点?

【问题讨论】:

  • supervisors_id 的列类型是什么?你有没有尝试过解决这个问题?
  • supervisors_id 的列类型是文本

标签: mysql sql arrays


【解决方案1】:

你可以通过比较字符串的长度和用空字符串替换逗号的字符串长度来计算逗号。

有点像:

SELECT length(supervisors_id) - length(replace(supervisors_id, ',', '')) + 1
       FROM elbat;

如果列中还有空字符串,您可能需要添加更多逻辑,在这种情况下检查并返回 0 而不是 1。例如使用CASE:

SELECT CASE
         WHEN supervisors_id <> '' THEN
           length(supervisors_id) - length(replace(supervisors_id, ',', '')) + 1
         ELSE
           0
       END
       FROM elbat;

但你的设计并不是最好的。应该有一个链接表,而不是逗号分隔的列表。

【讨论】:

  • 谢谢老兄,它就像魔术一样!您能否给我一个提示,说明如何将它与链接表一起使用。我只是想避免在表格中出现很长的行,但我对新想法持开放态度。
  • @PhilipOnyango:欢迎!有一个新表,每行存储一个(同一个)主管 ID 和该其他表的一行的 ID。由于您尚未透露太多架构,因此我无法详细说明。
  • 我已经为所有主管创建了一个父表。因此,在这个名为 daily_tasks 的表中,每当主管在当天分配任务时,我只是将主管的 ID 连接起来。
  • @PhilipOnyango:不要这样做,而是创建另一个表并将主管 ID 和任务 ID 插入其中。
  • 我现在完全明白你的意思了。我认为这是对我的情况的更好实施。非常感谢,我很感激。
猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 2011-06-09
  • 2018-06-06
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多