如果我改成将频道id用逗号拼接成一串字符串保存到mysql数据库,那如果用户关注的频道很多会不会也影响我的存储空间
时间: 2023-04-03 14:01:27 浏览: 84
对于这个问题,我可以回答。如果你将频道id用逗号拼接成一串字符串保存到mysql数据库,那么如果用户关注的频道很多,会影响你的存储空间。因为每个频道id都会占用一定的存储空间,如果用户关注的频道很多,那么这些频道id拼接成的字符串也会很长,占用更多的存储空间。建议你考虑其他的存储方式,比如使用多个表来存储用户关注的频道。
相关问题
帮我写一个sql,多行逗号拼接的字符串,将逗号拆开
假设我们有一个名为`table1`的表,其中有一个名为`column1`的列,存储了多行逗号拼接的字符串。现在我们需要将这些字符串拆开,获取单个元素。
以下是将逗号拼接的字符串拆开为单个元素的SQL语句:
```
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(column1, ',', numbers.n), ',', -1)) AS element
FROM table1
CROSS JOIN (
SELECT 1 + units.i + tens.i * 10 AS n
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS tens
) AS numbers
WHERE numbers.n <= 1 + (LENGTH(column1) - LENGTH(REPLACE(column1, ',', ''))))
```
解释一下以上SQL语句的构成:
1. 首先,我们使用`SUBSTRING_INDEX`函数将逗号拼接的字符串拆分为单个元素,使用`CROSS JOIN`将结果与数字序列连接起来。这个数字序列用于获取每个元素的位置,这里使用了两个`SELECT`子句,分别生成0-9的数字序列,并通过`CROSS JOIN`组合在一起,生成0-99的数字序列。
2. 接着,我们使用`WHERE`子句来限制`numbers.n`的范围,保证我们只获取存在的元素。具体来说,我们使用`LENGTH`函数计算逗号拼接的字符串中逗号的个数,然后使用`SUBSTRING_INDEX`函数获取第`n`个元素的位置,最后使用`TRIM`函数去除元素两侧的空格,得到最终结果。
注意:以上SQL语句仅适用于MySQL数据库。如果使用其他数据库,可能需要做一些修改。
MySQL将逗号拼接的字符串进行分割并求和
如果你有一个逗号分隔的数字字符串,可以使用 MySQL 的 FIND_IN_SET() 函数和 REPLACE() 函数将其拆分成单个数字,并使用 SUM() 函数将它们求和。具体步骤如下:
首先,使用 REPLACE() 函数将逗号替换为空格,然后使用 TRIM() 函数删除空格:
```
SELECT TRIM(REPLACE('1,2,3,4,5', ',', ' '));
```
然后,使用 FIND_IN_SET() 函数将字符串中的每个数字拆分成单独的行:
```
SELECT FIND_IN_SET('1 2 3 4 5', '1');
```
最后,使用 SUM() 函数对拆分后的数字进行求和:
```
SELECT SUM(FIND_IN_SET('1 2 3 4 5', '1'));
```
或者将其组合成一个查询:
```
SELECT SUM(FIND_IN_SET(TRIM(REPLACE('1,2,3,4,5', ',', ' ')), '1'));
```
这将返回数字字符串中所有值为 1 的数字的总和。如果要计算其他数字的总和,只需将函数中的 '1' 替换为所需的数字即可。