热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢?FIND_IN_SET(str,strlist)官网:http:dev.mysql.com

原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的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;

技术图片

 

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


推荐阅读
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
author-avatar
株洲市网商会
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有