SELECT f . * , tmp.userid, tmp.cishu
FROM fx_user f, ( SELECT a.id, b.userid AS userid, COUNT( * ) AS cishu
FROM `fx_user` AS a
LEFT JOIN `fx_plan` AS b ON a.id = b.userid
AND b.fxtype =0
GROUP BY a.id
)tmp
WHERE f.id = tmp.id
AND priority =1
ORDER BY id ASC
LIMIT 0 , 50

 通过括号内左连接查询,得到一个结果集,这个结果集可以看作是一张虚拟表tmp:

 (

SELECT a.id, b.userid AS userid, COUNT( * ) AS cishu
FROM `fx_user` AS a
LEFT JOIN `fx_plan` AS b ON a.id = b.userid
AND b.fxtype =0
GROUP BY a.id
)tmp

 得到包含左表user表的全部行数据(tmp),类似于

1------a

2------b

3------c

4------NULL

即,左表全部列出,右边不存在的信息用null填空。

然后再用          select * from 表1,表2 where 表1.字段 = 表2.字段     这种多表查询方式取得自己想要的结果。

———————————————————分割线—————————————————————————

今天再次看上次的查询,发现用这种临时表的方式,搞得太复杂了,自己对查询还是掌握太少了。百度一阵子,又找到以下更加简单的方法:

1、次数为0,是一种情况
*****次数为0时,类型不选则用

无论15分钟还是随机都没有分享的

SELECT * from `fx_user` where id NOT IN (SELECT userid FROM `fx_plan` where fxtype=2 or fxtype=1 group by userid)

  

次数为0,类型选择15分钟,则用
15分钟没有分享的

SELECT * from `fx_user` where id NOT IN (SELECT userid FROM `fx_plan` where fxtype=1 group by userid)

  

次数为0,类型选择随机,则用

随机没有分享的

SELECT * from `fx_user` where id NOT IN (SELECT userid FROM `fx_plan` where fxtype=2 group by userid)

  

姓名和级别后面追加查询条件 and 即可

==================================
2、次数不为0,是一种情况
*****如果选择 随机 ,且次数为2,这个比较麻烦点

select * from `fx_user` f ,(SELECT userid,count(*) as cishu FROM `fx_plan` where fxtype=2 group by userid) tmp where f.id=tmp.userid and tmp.cishu=2

  

*****如果选择 随机 ,且次数为1,

select * from `fx_user` f ,(SELECT userid,count(*) as cishu FROM `fx_plan` where fxtype=2 group by userid) tmp where f.id=tmp.userid and tmp.cishu=1

  

姓名和级别后面追加查询条件 and 即可

==================================
发现用 having 取代 where 后,就可以用 count 作为查询条件了 (HAVING要放到最后)

SELECT * from `fx_user` where id IN (SELECT userid FROM `fx_plan` where fxtype=2 group by userid HAVING count(userid)=2 )

  

这样一来,1,2两种情况就可以合二为一了。

记录一段mysql代码的更多相关文章

  1. 数据段、代码段、堆栈段、BSS段的区别

    进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用 途 不一而不尽相同,有些内存是事先静态分配和统一回收的 ...

  2. 记录这段时间java编程的小知识点

    记录这段时间java编程的小知识点 eclipse项目导入中文乱码 eclipse左侧目录结构变动 eclipse代码段左右移动 按tal键,是整体右移. 按shift  table 同时按,是整体左 ...

  3. C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

      BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 : ...

  4. bss段,代码段及数据段,堆栈段的区别

    bss段,代码段及数据段,堆栈段的区别 时间:2012-11-21 10:0772人阅读 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英 ...

  5. (转)Linux下数据段的区别(数据段、代码段、堆栈段、BSS段)

    进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的, ...

  6. 为QNetworkAccessManager添加超时提醒(自己记录一段时间里的下载字节数,用定时器去定期检测,从而判断是否超时)

    在做更新,在测试异常的时候,在下载过程中,发现如果直接系统禁用了网络,会报错误,可以捕获.但是如果是第三方软件限制程序联网,问题来了. 程序会一直在那里等待,没有异常,也不发送QNetworkAcce ...

  7. 浅析堆栈段,BBS段,数据段,代码段

    文章目录 1. 进程,线程 2. 堆栈段 3. BBS段 4. 代码段 5. 数据段 6. 例子 7. 总结 1. 进程,线程 所谓进程是指在系统中能独立运行并作为资源分配的基本单位,程序段,数据段和 ...

  8. C# 一段绘图代码 在form_load事件不能显示图

    今天无意将一段绘图代码 写在form_load事件了,结果不能显示绘图.(代码:Graphics g = this.CreateGraphics();Pen pen = new Pen(Color.R ...

  9. 【转】可执行程序包括BSS段、数据段、代码段

    可执行程序包括BSS段.数据段.代码段(也称文本段). 一.BSS BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域.特点是:可 ...

  10. 一段C++代码想到的问题

    今天在学习<Unix环境高级编程>,第七章进程环境给出了一个进程的内存分布示意图,从下往上依次为“正文段->初始化数据->未初始化数据(默认初始化为0)->堆(从低地址到 ...

随机推荐

  1. PDFSharp - Graphics 绘制接口

    PDFSharp - Graphics Graphics - PDFsharp and MigraDoc Wiki 所有的 Graphics 类型都设计成模仿来自 System.Drawing 命名空 ...

  2. 【Linux】【虚拟机】 IP地址的动态与静态设置

    目录 配置文件的修改 配置文件的修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IP配置方式(不指定:none,静态:static,动态:dhcp) ...

  3. 03-FTP和TFTP命令

    http://www.h3c.com/cn/d_202101/1375275_30005_0.htm 1 FTP 1.1 FTP服务器配置命令 1.1.1 display ftp-server 1.1 ...

  4. 启用Linux防火墙日志记录和分析功能

    防火墙的基本功能是阻止来自可疑网络/来源的连接.它会检查所有连接的源地址.目的地址和端口,并决定是否允许或阻止流量.防火墙的每个操作都会记录为日志数据.监控和分析这些日志对于保护您的网络免受攻击至关重 ...

  5. Qt/C++音视频开发77-获取本地有哪些摄像头名称/ffmpeg命令日志方式

    一.前言 上一篇文章讲使用ffmpeg函数接口去获取本地摄像头信息,这种方式只能从ffmpeg5版本开始才具备,那ffmpeg3/4只能干瞪眼?那肯定不行的,必须要想办法打通这个功能,查阅信息发现可以 ...

  6. Diffusion Model-Stable Diffusion(一)

    Stable Diffusion 是一个基于扩散模型的图像生成模型,可以用于生成高质量图像.其传统实现主要基于 PyTorch,最常用的开源实现是 CompVis/stable-diffusion 和 ...

  7. JavaScript中find()和 filter()方法的区别小结

    前言 JavaScript 在 ES6 上有很多数组方法,每种方法都有独特的用途和好处. 在开发应用程序时,大多使用数组方法来获取特定的值列表并获取单个或多个匹配项. 在列出这两种方法的区别之前,我们 ...

  8. TNN编译及使用

    要使用 CMake 和 TNN 库基于 C++ 实现神经网络模型的推理预测,你需要按照以下步骤进行操作: 准备环境 确保已安装 CMake 和 C++ 编译器.并从 TNN 的 GitHub 仓库下载 ...

  9. Cesium中3DTiles使用CustomShader着色器渲染

    加载模型 新版本cesium加载3DTiles代码如下,后续效果只修改CustomShader内内容 //加载楼栋白膜 let tileset try { tileset = await Cesium ...

  10. JS 实现在指定的时间点播放列表中的视频

    为了实现在指定的时间点播放列表中的视频,你可以使用JavaScript中的setTimeout或setInterval结合HTML5的<video>元素.但是,由于你需要处理多个时间点,并 ...