一个字符串‘3;6;7;15;35;99;’
如何查询得到
xx
--
3
6
7
15
35
99

解决方案 »

  1.   

    ‘3;6;7;15;35;99;’有没有长度的限制。 如果能确定最大的:数量, 可以通过instr(), substring() 来取得字符串,然后用union[align=center]====  ====
    [/align]
      

  2.   


    LEN(REPLACE('3;6;7;15;35;99',';',''))取得有多少个;
    1、用循环执行
    ff=SUBSTRING_INDEX('3;6;7;15;35;99',';', i)取値,
    2、
    REPLACE('3;6;7;15;35;99',ff,'')刷新字符串,重新执行执行第一步思路如此,用要一个存储过程来完成
      

  3.   

    其实我是想从2个字符串中找相同的记录,
    #建表测试代码
    create table test1
    (`strA` varchar(20) NOT NULL);
    create table test2
    (`strB` varchar(20) NOT NULL);
    insert into test1 values('2;5;7;13;55;108;266;');
    insert into test2 values('2;7;13;108;');
    #表中的strA,strB长度是不限的,元素间以;分隔,strB中的元素一定在strA中有。
    目标
    XX  FLAG
    --------
    2    1
    5    0
    7    1
    13   1
    55   0 
    108  1
    266  0
      

  4.   

    想用find_in_set函数来找,所以想先把它转为一列的形式来用,
    请大家帮忙呀!
      

  5.   

    有什么条件限制吗?1。可以用store procedure 吗?
    2。是否是只能用SQL语句实现?
    [align=center]====  ====
    [/align]
      

  6.   

    1。可以用store procedure 吗?
         如果可以,我可以帮你写个store procedure, 不过你的mySQL version >5
    2。是否是只能用SQL语句实现?
        比较复杂,但亦可实现说明你的要求,省得我做两种方案
    [align=center]====  ====
    [/align]
      

  7.   

    可以用store procedure ,5.0的支持的,
    很感谢
      

  8.   

    test1, test2表中各只有一行记录?[align=center]====  ====
    [/align]
      

  9.   

    set @str = '3;6;7;15;35;99;';
    select substring_index(@str,';',1);
    select substring(substring_index(@str,';',2),instr(substring_index(@str,';',2),';')+1);...
      

  10.   


    今天要开会,如果没人帮你写的话,明天帮你写一下[align=center]====  ====
    [/align]
      

  11.   

    另外,看了你的表结构,一般来说,设计用户权限表分成三张表,很少这样设计的user (uid, pswd  ....)
    role (rid, ...)
    permission ( rid, perid,...
    userRole ( uid, rid)[align=center]====  ====
    [/align]
      

  12.   

    split_part(‘3;6;7;15;35;99;', ';', 1) = 3;
    split_part(‘3;6;7;15;35;99;', ';', 2) = 6;
    ...
      

  13.   

    mysql 没有split_part函数吧?
      

  14.   

    问题我自己解决了,我晚上把代码贴出来,现在有点忙!· [align=center]====  ====
    [/align]
      

  15.   

    说来惭愧,如果把问题描叙得更清楚,应该大家早就可以帮到我了,
    其实还有个表字段包含所有ID,
    问题重新描叙:
    一个表A,有字段ID,包含所有数字。
    一个表B,有字符串IDGROUPS‘3;6;7;15;35;99;’ 
    如何查询得到 
    xx 
    -- 



    15 
    35 
    99#测试代码
    DROP TABLE IF EXISTS `testa`;
    CREATE TABLE `testa` (
      `id` int(11) NOT NULL default '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
    INSERT INTO `testa` (`id`) VALUES (1);
    INSERT INTO `testa` (`id`) VALUES (2);
    INSERT INTO `testa` (`id`) VALUES (3);
    INSERT INTO `testa` (`id`) VALUES (4);
    INSERT INTO `testa` (`id`) VALUES (5);
    INSERT INTO `testa` (`id`) VALUES (6);
    INSERT INTO `testa` (`id`) VALUES (7);
    INSERT INTO `testa` (`id`) VALUES (8);
    INSERT INTO `testa` (`id`) VALUES (9);
    INSERT INTO `testa` (`id`) VALUES (10);
    INSERT INTO `testa` (`id`) VALUES (11);
    DROP TABLE IF EXISTS `testb`;
    CREATE TABLE `testb` (
      `id` int(11) default NULL,
      `IdGroups` varchar(100) default NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
    INSERT INTO `testb` (`id`,`IdGroups`) VALUES (1,'5;4;7;11;9;');
    #执行SQL
    select a.id as xx FROM testa a where (select FIND_IN_SET(a.id,REPLACE(b.idGroups,';',','))  from testb b where b.id='1');#结果
    xx 
    -- 
    4
    5


    11 结帖/