mySql查询一对多,取多的排序的第一条数据

1.在我们的日常开发中,常遇到一对多的表,我们想查询主表数据,然后查询多表的某个条件的信息。

方法一:查询多表,jion主表查询,这个常规的查询

 

方法二:我们想查主表,顺便查询多表的数据

 

二:列如我们查询主表,并查询多表最大id的数据,sq如下:

      SELECT
        be.create_time,
        be.update_time,
        be.creater,
        be.updater,
        be.serial_number,
        be.longitude,
        be.latitude,
        be.battery_status,
        be.rescue_num,
        be.create_time,
        be.equipment_state,
        be.warranty_start_time,
        be.warranty_end_time,
        be.es_start_time,
        be.es_end_time,
        be.address,
        be.id,
        be.network_status,
        be.new_serial_number,
        be.asset_number,
        be.installation_details,
        be.counterpart_name,
        be.counterpart_telephone,
        be.counterpart_mail,
        be.sub_level_counterpart_name,
        be.sub_level_counterpart_telephone,
        be.sub_level_counterpart_mail,
        be.battery_start_time,
        be.battery_end_time,
        be.electronic_fence_offset,
        be.province,
        be.city,
        be.county,
        be.install_longitude,
        be.install_latitude,
        be.retire_type,
        oi.file_create_time,
        oi.file_status,
        oi.checkFileId,
        so.`name` orgName
        FROM
        business_equipment be
        LEFT JOIN security_organization so ON be.org_id = so.id
        LEFT JOIN (
    SELECT bescf.id  checkFileId,bescf.equipment_id,bescf.file_create_time,bescf.file_status FROM business_equipment_self_check_file bescf
    LEFT JOIN (
        SELECT MAX(id) AS id, equipment_id FROM business_equipment_self_check_file GROUP BY equipment_id
    ) AS b ON bescf.equipment_id = b.equipment_id
WHERE bescf.id = b.id
) AS oi ON oi.equipment_id = be.id
WHERE
 be.valid = 1
ORDER BY be.create_time DESC

如图效果:

acedecdce1524876b8e5a975a598bc41.png

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一:需求分析 二:总体设计 三:详细设计 四:调试与测试 五;测试结果 六:本次课程设计的心得体会 七:附录 本程序设计亮点介绍(及)改进方面 1.在修改函数中,可以实现单条记录修改(运用switch) 2.查询函数中,能返回该函数继续查询(运用了递归) 3.使用变量少,仅通过变量i的递加和示成员数的变量n就实现了数据结构体之间的联 系 4.界面美观,使用方便 5.允许编号输入为字符 6.在显示函数上能够分屏显示(换页) 缺点 在输入数据时,未输完一个成员的所有信息不能退出输入 一:需求分析 A.需要实现的功能有:输入功能、输出功能、显示功能、查找功能、以及增加、删 除、修改功能。输入功能要求一次完成若干信息的输入;显示功能要能完成所有信息的 显示,并且自动分页;查找可以通过多种方式进行。 按需求的功能,应该设计出输入函数、输出函数、显示函数、查找函数、修改函数。另 需要一个标准界面。 B.数据存储问题 这个系统数据庞大复杂,需要需要适当应用数组,循环,结构体,文件操作等基本 语句及稍有难度的语句。因此要求我们熟练掌握结构化程序设计的基本思路和方法,在 所掌握的基本知识和技能的基础上,进一步提高自学能力和查找资料的能力,解决一定 程度的复杂的结构化程序设计问题,加深对所学知识的理解与掌握,利用自己所学知识 解决实际问题的能力,为以后的程序开发打下基础。 二:总体设计 主要结构图示 本程序由主函数和多个子函数组成,可执行多种数据管理的功能。具体通过c语言中 结构体数组来实现。主函数主体为定义的结构体,和一个switch函数,以提供多种程序 操作功能。 主要需运用到结构体数组、文件、函数等内容知识。 子函数有六个,分别负责添加、显示、删除、查询、修改、保存的功能。通过变量i使结 构体数组之间达成数据的功能,利用该方法主要考虑到成员中对于结构体指针尚未 熟练掌握,而这种方法更加便捷易懂。 子函数功能介绍 1. 添加:输入成员信息,依次输入编号、姓名、QQ、电话号码、单位、电子邮箱、身 份。 2. 显示:以格形式输出所有通讯记录 3. 删除:只需输入该成员姓名,便删除其所有记录 4. 查询:可选用姓名、电话、单位身份4种方式来查询 5. 修改:输入该成员姓名后,再依次输入更新信息完成修改 6. 保存:输入文件名(带后缀)后保存。C-free中会默认以txt文件保存至c- free standard/temp文件夹中 三:详细设计 1. 主函数 完成变量的初始化与函数的定义之后,运用for( ; ; )来开启一个无限循环。循环内有switch函数来实现函数的选择功能,case1、case2等分 别执行不同的函数操作,每个函数中调用了相应的函数,并采用函数system("pause") ;暂停等待按键。在case6中采用函数exit(0)跳出循环。 下面在讲一下主函数中定义的n的作用,n的初值是1,当执行完case1中的函数input ( )后返回值为n+i,i为输入的成员数,返回值重新赋给n,n变为成员数,从而确定了之后 display()等函数循环中的终止条件。 2. 分函数 【1】添加 【2】显示 【3】删除 【4】查询 【5】修改 保存函数:【1】定义一个文件指针fp 【2】输入想创建的文件名称,如filename 【3】开辟文件,用fopen以"写"的方式打开,并把fp指针指向该文件 【4】在文件中输入信息 【5】保存(即fclose(filename)) 查询函数:运用了if来实现选择,并通过递归返回继续查询。 注:身份以及单位的查询方式有所不同,单位只能查找一条符合的记录,而按身份查询 可显示所有符合的信息。若查找不到,则返回继续查询,选择5返回则退出查询。 四:调试与测试 我们编写的函数具有一定的容错能力。具体现为 【1】如select函数中输入0-6以外的数,则循环继续进行,直到输入0-6为止 【2】sign!='n'&&sign!='N'语句保证了大小写不会影响结果 【3】while(m!='1'&&m!='2'&&m!='3'&&m!='4') { printf("输入错误,请重新选择:"); scanf("%c",&m); }保证了输入正确 【4】当输入的成员信息错误时,可通过修改函数进行改动 五:测试结果 1.主函数运行正常。通过for语句是界面循环,并有switch及system函数进行配合调节 达到目的。(界面显示如下) 2.测试结果:运行正常,达到了预订的目标。 此处为通过保存函数保存后的txt文本中的学生信息 六:心得 课程设计是一个不断学习、思考、编写、修改的过程。它对我们的能力提出了挑战。 我不仅意识到c语言基础的重要性,更意识到了自学能力的重要性,同学学习书本,查找 资料等多种途径来构建思
适用范围 1 11启用科目对照提示生成结账凭证错误 7 12特殊数据权限授权不起作用 7 13总账系统参数重复,无法删除 7 14做凭证时选不到内部公司 7 15科目辅助账无法变更 8 16变更科目辅助账类型时报错 8 17客户信息错误添加,删除时提示被辅助账横引用 9 18点击总账模块菜单时提示没有启用的科目 9 2.初始化 10 21辅助账科目初始余额录入界面无法显示外币余额 10 22副帐簿辅助账初始余额无法录入 10 23总账与固定资产无法关联 10 24科目余额初始化,无法录入实际损益发生额 11 25现金流量初始化界面录入辅助账时性质栏为灰色 11 26应付与总账联用时,提示对账不平 11 27辅助账初始化时选择特定的核算项目报错 11 3.凭证处理 13 31当第一条分录录入的是贷方科目时,辅助账行只显示头而无内容 13 32暂存凭证提交后编码不变,还是原来的暂存凭证号 13 33辅助项目输入金额的时候能否分成借贷方输入 13 34应付账款设置了为受控系统,所以在总账中无法生成此凭证。 13 35结转损益时选不到有余额的损益类科目 13 36凭证保存或是提交都保存报错 13 37凭证查询界面无法按照记账类型进行排序 14 财务会计总账应用问题集萃 金蝶国际软件集团有限公司版权所有 3 38本组织查询凭证可以看到其它组织凭证 14 39凭证录入不要显示报告币借贷方 14 310凭证录入时,在辅助账类型中录入客户助记码,不能自动带出该客户。 14 311凭证提交后立即出现打印界面 14 312凭证使用工作流复核后,在凭证序时簿界面还是显示提交状态,无法过账。 15 313凭证提交总是提示业务日期晚于到期日 15 314凭证无法提交 15 315凭证提交时提示“凭证现金流量附项目指定不正确” 15 316 凭证出现跳号 15 317凭证业务日前提交后无法修改 16 318凭证已指定流量在附调整又要求再次调整 16 319标准凭证引入后希望制单人还是原凭证制单人 16 320凭证引出为模式凭证报错 16 321凭证重排的规则 16 322凭证提交,提示“核算项目借贷不平” 17 323 其他业务单据生成凭证,在凭证序时薄修改和删除凭证,提示获关联关系出错 17 324在引入凭证提示未有符合过滤条件的凭证被引入 17 325设置数量核算的科目,在新增凭证界面无法带出计量单位和数量列 18 326凭证录入时,选择辅助账查看的界面如何设置为左树右结构 18 327生成凭证的日期如何设置为当天的日期 18 328新增凭证选择不到外部银行账户 18 329新增凭证,辅助账选择银行账户,按F7无银行账户供选择。 18 330新增凭证中,无法选择指定的供应商 18 331暂存凭证修改后凭证跳转到其他位置 19 332标准凭证引入的凭证无法进行修改 19 333修改组织单元名称后,凭证序时簿界面还显示的变更前核算项目名称。 19 334其他业务系统单据生成凭证有空行 19 335凭证复核报错 19 336标准凭证引入报错 19 337用智能ABC输入法录入凭证时,EAS系统自动关闭 20 338在录入凭证辅助账时,把辅助账“名称”设置为默认查询条件 适用版本:EAS600 20 339凭证序时簿界面发现缺少转账凭证 20 340凭证序时簿界面审核和过账的按钮是不可用 20 财务会计总账应用问题集萃 金蝶国际软件集团有限公司版权所有 4 341凭证新增,如何选择到所有职员信息 21 342结转损益后,损益类科目还有余额 21 343总账->期末处理->期末结账报错 21 344凭证删除后在应付系统还存在相应数据 21 345期末处理->结转损益报错 21 346凭证无法过账,提示辅助账未结束初始化 21 347 凭证序时簿界面无法显示核算项目列 22 348 凭证编号不能自动更改 22 349 编码规则经常不记录断号,凭证出现断号。 22 350多借多贷分录下,凭证提交时本位币借贷平衡,报告币借贷不平衡,差一分钱 23 351"凭证查询"双击报错 23 352 收款单生成的凭证无法删除 24 353 科目余额显示职员为空 25 354 凭证字段FSOURCETYPE、FBIZSTATUS的内容及含义 26 4.账簿、财务报 26 41明细分类账导出报错 26 42多栏账方案报错 27 43辅助核算明细内容为空 27 44辅助核算明细借方、贷方列数显示异常 27 45凭证金额与辅助核算明细显示的金额不一致 27 46科目余额显示的核算项目与基础资料的核算项目名称不一致 27 47核算项目余额期末余额显示为空 28 48虚体查询核算项余额切换币别需重现选择公司 28 49科目核算项目组合查询报错 28 410科目核算项目组合,同一科目不同期间,显示的科目条数不一致 28 411科目余额是否包含未过账凭证显示的结果不一致 29 412科目余额查询大量的数据,拉动右侧滚动条报错 29 413科目余额科目初始余额异常 29 414科目余额核算项目列显示异常 29 415科目余额核算项目内容显示异常 30 416科目余额科目名称与科目代码不符 30 417科目余额联查明细数据不正确 30 财务会计总账应用问题集萃 金蝶国际软件集团有限公司版权所有 5 418科目余额一级科目与明细科目合计数不一致 30 419科目余额与核算项目组合中的期初余额不一致 30 420科目余额数据 31 421明细分类账查询时,凭证编号未能按顺序排列 31 422明细分类账显示的借贷位置不正确 31 423虚体查询科目余额数据不正确 31 424科目余额核算项目信息显示异常 31 425科目余额一级科目不能自动汇总二级科目的金额 31 426科目余额明细科目数量合计与一级科目数量不一致。 32 427总账科目余额与明细账金额不符 32 428明细分类账导出EXCEL时系统卡死。 32 429科目余额头显示不正常 32 430科目余额头部分出现黑框框/个别用户查询辅助核算明细显示6位小数 33 431科目余额过滤“显示核算项目明细”查询核算项目名称显示错误。 34 432会计科目余额方向调整 34 433要求虚体科目余额公司范围选择只显示用户有权限的公司 35 434科目余额勾选显示核算项目明细显示辅助账空行 35 435总账科目余额与明细分类账数据有差异 35 5.往来管理、往来通知单 36 51通知单查询中“解除结帐检查”按钮不可见 36 52通知单查询中“联查凭证”功能需要进行权限项控制 36 53往来帐帐龄分析,帐龄时间不可设置 36 54账龄分析查询报错 36 55总账菜单中未见<往来通知单>菜单 36 56现金流量通知单勾稽 37 57无法更改“核销模式”参数,提示存在未过账的凭证 37 58通知单查询已解除结账检验,但是系统仍然无法结账 37 59往来账查询显示不出客户和供应商 38 510凭证挂辅助账(供应商)往来账查询查不到 39 6.期末处理 39 61期末调汇时无报告币栏 39 62结转损益科目金额错误 39 财务会计总账应用问题集萃 金蝶国际软件集团有限公司版权所有 6 63结转损益生成凭证提示借贷不等 39 64结转损益科目未按余额相反方向结转,导致数据查询不便。 39 65期末调整凭证摊销功能不可用 40 66期末处理余额重算报错 40 67自动转账分录借方分录无法数 40 68反月结不成功 40 69自动结转模板无法按指定的成本中心结转 40 610总账期末结账时提示重新连接 41 7.现金流量 41 71凭证界面指定现金流量无法保存 41 72现金流量汇率变动产生的现金流量净额为空 42 73凭证指定现金流量界面无法选择现金流量项目 42 74现金流量查询界面汇总数异常 42 75现金流量指定界面多了“性质”栏,影响凭证提交 42 76现金流量补充资料和现金流量 42 77现金流量中,经营活动产生的现金流量净额错误 43 78现金流量查询结果出错导致 43 79现金流量项目指定问题 43 710现金流量与附经营活动现金流量净额不一致 43 711附指定中,对一级科目无法消指定 44 8.多账薄与其他 44 81主副账簿本位币不一致时,如何传递凭证 44 82凭证模板无法打印现金流量项目 44 83辅助核算明细打印核算项目小计页数 44 84辅助核算明细套打多个核算项目为空 44 85辅助明细账无法设置外币套打模板 45 86核算项目余额打印参数设置报错 45 87凭证多张打印时显示的页数不正确 45 88凭证打印预览,点击页面设置报错 45 89凭证界面显示科目异常,导致无法打印 45 810核算项目打印名称错误 46 811凭证打印仍然显示之前的核算项目名称 46
SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁升级 关闭不必要的端口 关闭联必要的服务 数据库引擎 SQL Server Analysis Services SQL Server Reporting Services SQL Server Integration Services SQL Server 代理 SQL Full-text Filter Daemon launcher SQL Server Browser 同时开启所有服务系统性能会变得很差,根据需要手动启动或者禁用某个服务 DTC: Distributed Transaction Coordinator(分布式事务处理协调器),用于协调多个数据库、消息队列、文件系统等等资源管理器的事务,由于内部开发中并不使用这个功能,远程数据库服务器上也并不经常使用,因此建议关闭这个服务 禁用不使用的协议 Shared Memory 默认为已启用状态,这个协议只能用于本地连接,不能用于远程连接,一般用于其它协议出问题的时候管理作诊断使用 TCP/IP 禁用不需要使用的协议,减少网络攻击对象 减少监听的网卡和IP地址 改变监听端口号 安全地设置账户 Windows身份验证[微软推荐的方式] 优势: 1.访问SqlServer时速度更快,不用输入用户名和密码 2.可以利用Windows系统的自身工具和安全策略管理账户 3.安全确认和口令加密、审核、口令失效、最小口令长度和账号锁定 SqlServer身份验证 1.将sa账户名更改为其它账户名比如nocial,防止黑客利用sa进行攻击 2.删除不使用的账户 3.对已有账户设置安全密码[强制密码规则] 4.限制登录->远程登录、匿名登录 5.限制用户角色和权限,一般将权限设置到最低。设置角色的时候不要为public角色授予任何权限,并且从sysadmin这个角色中删除windows的administrators组,提高系统安全性。 删除不必要的数据库对象 删除危险的存储过程 xp_cmdshell:执行操作系统命令,这是一个系统后门[可以移动文件位置、创建用户、提升用户权限],建议不需要则删除掉。 ole自动化存储过程 任务管理存储过程 强化文件和目录安全 数据库最终以文件的形式存储在文件系统中 使用NTFS设置权限 限制共享【不能设置为完全控制】 及时审核日志 sqlserver的审核机制可以帮助跟踪并且阻止系统中没有授权的用户他的行为。比如没有授权的用户登录系统会阻止这次登录,并且把这次操作给记录下来。审核机制既能跟踪失败记录也能跟踪成功记录。所有的数据库平台均在不同程度上提供了审查功能。 跟踪用户行为 保护数据数据库性能优化 数据库的性能优化主要有两个方面:减少查询比较次数、减少资源的征用。 使用工具Sql Server Profiler优化数据库的性能,减少资源的征用 SqlServer Profiler的功能 Sql Server Profiler的用法  定义跟踪  登录连接、失败和断开  Select、Insert、Update和Delete语句  SQL批处理的开始或结束  写入到Sql server错误日志的错误  安全权限检查  Profiler执行的事件 让Profiler监视我们感兴趣的事件,可以监视的事件太多,监视太多会大大降低性能和增大数据,只监视与数据库的性能密切相关的哪些事件。常见的感兴趣的事件:  执行查询的性能  单个用户或应用程序的活动  逻辑磁盘的读写  语句级别上的CPU占用  Standart模板的事件类 优化数据库性能可以从五个层次来进行:  优先级一:减少数据的访问【减少磁盘访问】  优先级二:返回更少数据【减少网络传输或磁盘访问】  优先级三:减少交互次数【减少网络传输或磁盘访问】  优先级四:减少开销【减少CPU及内存开销】  优先级五:利用更多资源【增加资源】 技术上从四个方面来解决性能优化问题 1、调整数据库结构设计 2、调整应用程序结构设计 3、调整数据库SQL语句 4、调整服务器内存分配 如果不熟悉sqlserver可以使用数据库引擎优化顾问来对数据库提出优化建议,然后通过系统管理的修改达到目的。 数据库引擎优化顾问  数据库引擎优化顾问介绍  分析一个或多个数据库的工作负荷和物理实现,工作负荷可以是优化的sql语句或者sqlserver profiler的跟踪文件和数据。我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据,然后把这些提供给数据库引擎优化顾问,让它去分析。  提出合理的物理设计结构,物理设计结构包括数据库中的索引、索引视图、非聚集索引、聚集索引视图等等。对工作负荷进行分析后,数据库优化顾问会建议添加删除修改数据库的物理设计结构。推荐一组合理的物理结构以降低工作负荷的开销。从而提高数据库的性能 数据库性能优化的常见问题 如何发现问题,如何分析导致性能降低的原因仍然是数据库管理员要掌握的知识。 事务占用资源的时间过长,造成阻塞 许多用户同时访问数据库的时候会产生大量事务,许多用户同时竞争一个资源导致占用资源的时间过长,造成阻塞。从而降低了数据库执行效率。产生这样的现象的原因如下: 1、多连接查询查询期间占用多个 2、事务需要占用太多资源,容易出现多个事务占用对方资源的状况。从而导致死锁 解决之道: 1、避免多连接查询,联合过多的会在查询中占用过多的资源。很容易因为别的事务占用资源而相互等待。 2、使用统一的SQL语句规范,特别是访问的顺序要保持一致,这样可以避免互相占用资源而导致的死锁。 不合理的数据文件设置,影响事务处理的性能 当事务处理产生大量数据的时候,数据文件的大小如果设置不合理将导致数据文件的不断扩展,这也会影响到事务处理的性能,进而影响到整个数据库的性能。 1、频繁操作数据库,导致日志文件增长的过快,因为日志文件记录数据库的原始操作。所以它的增长速度比数据文件要快得多。当日志文件的增长大小设置不合理的时候会导致频繁地扩展文件。从而影响性能 2、查询操作比较频繁,系统数据Tempdb的大小设置不合理。 查询操作比较频繁的时候系统数据Tempdb增长得会比较快,因为查询所产生的临时数据都存放在这个数据库上。如果Tempdb过小当查询数据量较大的时候Tempdb会自动扩展,如果遇到频繁的查询会导致Tempdb不断扩展,从而影响系统性能。这种情况我尽可能地使查询的返回结果比较小 3、大量插入数据,导致数据文件增长过快。不要设置数据文件的自动收缩,它会在忙碌的系统上导致不必要的性能开销。所以如果没有特别需要不要设置数据库的自动收缩。最好采用手动收缩。 磁盘数据组织不合理,导致磁盘的访问次数过多 数据库的磁盘访问都是按照页来访问数据的,无论访问的数据再少都是以页为单位读,1页为8K。所以如果将经常访问的数据放在一起,数据库读尽量少的页面就能够完成读操作。这样效率自然就提高了。也减少了磁盘头的来回移动。否则会多次读硬盘页面导致访问的效率降低。 对于A和B、C、D,如果经常查询A和B中的数据,那么可以将他们放在同一个文件组M中;如果经常访问C和D中的数据可以将他们放在同一个文件组N中。这样读效率就比较高,因为一次读就可能包含了两个中的数据,因此提高了查询效率。要解决“磁盘数据组织不合理,导致磁盘的访问次数过多”这个问题,我们可以将经常读写的数据放置在不同的磁盘上,也就是将经常在一起被多连接查询放在同一个文件组上。这里强调:这里反复提到的“不同的磁盘”指的的是不同的磁盘,而不是同一个硬盘的不同分区。 批量导入数据的时候,要进行特殊设置 当用户需要大批量导入数据的时候会突然增加很多日志记录,并且如果数据上有索引,数据每增加一条记录就会在索引上增加一条数据从而降低插入的性能。解决方案: 1、大批量导入数据的时候设置数据库的恢复模式为“大容量日志恢复模式” 2、导入前禁用索引,导入完毕后重建索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海兴辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值