• Mysql数据库多对多关系未建新表


    原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢?

    FIND_IN_SET(str,strlist)

    官网:http://dev.mysql.com/doc/refman/5.7/en/string-functions.html

    Mysql数据库

    此数据库为设计不合理的demo,仅用来示范多对多关系。

    创建表结构

    -- 新建user表
    CREATE TABLE `user` (
        `id` INT(11) NOT NULL COMMENT '人员id',
        `uname` VARCHAR(50) NULL DEFAULT NULL COMMENT '人员姓名',
        `hobbies` VARCHAR(255) NULL DEFAULT NULL COMMENT '业余爱好id(以逗号分割)',
        PRIMARY KEY (`id`)
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB;
    -- 新建业余爱好表
    CREATE TABLE `hobby` (
        `id` INT(12) NOT NULL AUTO_INCREMENT COMMENT '爱好id',
        `name` VARCHAR(255) NULL DEFAULT NULL COMMENT '爱好名称',
        PRIMARY KEY (`id`)
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    AUTO_INCREMENT=0;

    关联关系所在表查询

    关联关系都在user表中,查询user表并显示该用户所有的兴趣。

    当用FIND_IN_SET作为关联关系函数时,查询如下。

    再用上group by与group_concat函数。

    SQL语句如下

    SELECT
        u.*,
        group_concat( h.`name` ) AS hbs 
    FROM
        USER u
        LEFT JOIN hobby h ON FIND_IN_SET( h.id, u.hobbies ) 
    GROUP BY
        u.id

    查询结果如下:

    非关联关系所在表查询

    查询该兴趣有多少user感兴趣。

    SELECT u.* FROM user u WHERE FIND_IN_SET(#{hid},u.hobbies);

    查询结果如下:

    把关联关系所在表逗号分割的字段查询为多条记录

    select u.*,substring_index(substring_index(u.hobbies,',',b.help_topic_id+1),',',-1) hob
    from user u join
      mysql.help_topic b
        on b.help_topic_id < (length(u.hobbies) - length(replace(u.hobbies, ',', '')) + 1)
    order by u.id;

    on后面的语句:用length、replace函数计算对应的多少条记录。b.help_topic_id打印出来的值为0 1 2 3...

    substring_index的select列: 先用一次substring_index,分别截取字符串1个、2个、3个,然后再用一次substring_index截取最后一位从而达到目的。

  • 相关阅读:
    详解C#break ,continue, return
    c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
    简短总结一下C#里跨线程更新UI(转)
    必备:常用px,pt,em换算表(转)
    C# Textbox的ImeMode取值对中文输入法的影响 (转)
    转自:C#中TextBox水印提示的简单实现
    转载:C# this.invoke()作用 多线程操作UI 理解二
    转载:C# this.Invoke()的作用与用法 理解三
    MySQL数据库----基础操作
    python之路----线程
  • 原文地址:https://www.cnblogs.com/aeolian/p/12082090.html
Copyright © 2020-2023  润新知