mysql有无数组
发布时间:2023-05-20 14:17:14 所属栏目:MySql教程 来源:
导读:MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储。MYSQL中没有数组的原因是因为大多数人并不真正需要它。关系数据库使用关系工作,并且大多数情况下,最好是为每个“信息位”分配一行表
MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储。MYSQL中没有数组的原因是因为大多数人并不真正需要它。关系数据库使用关系工作,并且大多数情况下,最好是为每个“信息位”分配一行表。例如,可能认为“我想要一个东西列表”,而是创建一个新表,将一个表中的行与另一个表中的行相关联;这样可以表示“M:N”关系。数据库可以索引这些行;而数组通常不会编入索引。 1. MySQL中以字符串的形式存储数组 MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储 1.1. 求数组中元素的个数 方法:按指定符号分割字符串,返回分割后的元素个数。方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 CREATE function Get_StrArrayLength ( @str varchar(1024), --要分割的字符串 @split varchar(10) --分隔符号 ) returns int as begin declare @location int declare @start int declare @length int set @str=ltrim(rtrim(@str)) set @location=charindex(@split,@str) set @length=1 while @location<>0 begin set @start=@location+1 set @location=charindex(@split,@str,@start) set @length=@length+1 end return @length end 调用示例: select Get_StrArrayLength('78,1,2,3',',') 返回值: 4 1.2. 得到数组中指定位置的元素 方法:按指定符号分割字符串,返回分割后指定索引的第几个元素(注意索引从1开始),象数组一样方便 CREATE function Get_StrArrayStrOfIndex ( @str varchar(1024), --要分割的字符串 @split varchar(10), --分隔符号 @index int --取第几个元素 ) returns varchar(1024) as begin declare @location int declare @start int declare @next int declare @seed int set @str=ltrim(rtrim(@str)) set @start=1 set @next=1 set @seed=len(@split) set @location=charindex(@split,@str) while @location<>0 and @index>@next begin set @start=@location+@seed set @location=charindex(@split,@str,@start) set @next=@next+1 end if @location =0 select @location =len(@str)+1 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。 return substring(@str,@start,@location-@start) end 调用示例: select Get_StrArrayStrOfIndex('8,9,4',',',2) 返回值: 9 1.3. 结合以上两个函数,遍历数组中的元素 方法:结合上边两个函数,象数组一样遍历字符串中的元素 declare @str varchar(50) set @str='1,2,3,4,5' declare @next int set @next=1 while @next<=Get_StrArrayLength(@str,',') begin print Get_StrArrayStrOfIndex(@str,',',@next) set @next=@next+1 end 调用结果: 2.MySQL中存储数组(list)的示例 我在MySQL中有两个表。表Person具有以下列: id | name | fruits 水果列可以包含空或像(‘apple’,’orange’,’banana’)或(‘strawberry’)等的字符串数组。第二个表是Table Fruit,有以下三列: ____________________________ fruit_name | color | price ____________________________ apple | red | 2 ____________________________ orange | orange | 3 ____________________________ ...,... 那么我应该如何设计第一个表中的fruits列,以便它可以容纳从第二个表中的fruit_name列获取值的字符串数组?由于MySQL中没有数组数据类型,我该怎么办呢? 最佳答案: 正确的方法是使用多个表,并在查询中加入它们。 例如: CREATE TABLE person ( `id` INT NOT NULL PRIMARY KEY, `name` VARCHAR(50) ); CREATE TABLE fruits ( `fruit_name` VARCHAR(20) NOT NULL PRIMARY KEY, `color` VARCHAR(20), `price` INT ); CREATE TABLE person_fruit ( `person_id` INT NOT NULL, `fruit_name` VARCHAR(20) NOT NULL, PRIMARY KEY(`person_id`, `fruit_name`) ); person_fruit表包含一个人与其相关联的每个水果的一行,并且有效地将人和水果表链接在一起。 1 | "banana" 1 | "apple" 1 | "orange" 2 | "straberry" 2 | "banana" 2 | "apple" 当你想检索一个人和他们的水果,你可以做这样的事情: SELECT p.*, f.* FROM person p INNER JOIN person_fruit pf ON p.id = pf.person_id INNER JOIN fruits f ON pf.fruit_name = f.fruit_name (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐