php - Mysql这样的场景如何给表编写查询语句?

查看:108
本文介绍了php - Mysql这样的场景如何给表编写查询语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

学生表A:

a_id │ a_name
1   │ 小明
2   │ 小红
3   │ 小华
4   │ 小强

水果种类表B:

b_id │ b_name
1   │ 苹果
2   │ 香蕉
3   │ 橘子
4   │ 猕猴桃
5   │ 柚子

吃水果记录表C

c_id │ a_id │ b_id │ c_time
1   │ 2   │ 1   │ 2016-12-23
2   │ 1   │ 3   │ 2016-11-24  (小明11月吃了个橘子)
3   │ 2   │ 3   │ 2016-09-26
4   │ 3   │ 4   │ 2016-09-20
5   │ 2   │ 5   │ 2016-11-21  (小红11月吃了个柚子)
6   │ 1   │ 1   │ 2016-12-23
7   │ 2   │ 1   │ 2016-11-25  (小红11月吃了个苹果)

说明:表C中的a_id和b_id是A,B的冗余字段,非外键关系。

写出相应SQL语句需要实现结果(可以使用PHP/C#/Java辅助输出):
查询11月份吃水果统计:

 —— │ 苹果 │ 橘子 │ 柚子

小明 │ 0个 │ 1个  │ 0个
小红 │ 1个 │ 0个  │ 1个

解决方案

纯sql

SELECT a_name,SUM(pg) '苹果',SUM(jz) '橘子',SUM(yz) '柚子' FROM (
SELECT a_id,
CASE b_id WHEN 1 THEN 1 ELSE 0 END as pg,
CASE b_id WHEN 3 THEN 1 ELSE 0 END as jz,
CASE b_id WHEN 5 THEN 1 ELSE 0 END as yz,
DATE_FORMAT(c_time,'%Y-%m') time FROM C WHERE DATE_FORMAT(c_time,'%Y-%m') = '2016-11'
) d LEFT JOIN A ON d.a_id = A.a_id
 GROUP BY d.a_id

输出

+---------+------+------+------+
| a_name  | 苹果 | 橘子 | 柚子 |
+---------+------+------+------+
| 小明    |    0 |    1 |    0 |
| 小红    |    1 |    0 |    1 |
+---------+------+------+------+

你这样结合PHP/C#/Java 的话,提供思路,数据分组查询出来后

SELECT * FROM C WHERE DATE_FORMAT(c_time,'%Y-%m') = '2016-11'

结果

+------+------+------+------------+
| c_id | a_id | b_id | c_time     |
+------+------+------+------------+
|    2 |    1 |    3 | 2016-11-24 |
|    5 |    2 |    5 | 2016-11-21 |
|    7 |    2 |    1 | 2016-11-25 |
+------+------+------+------------+

代码在做处理,循环 这个结果,省略 for(...){if(...){...}} 相同的 a_id 增加到一个Array中 像这样的结构[{aid:1,pg:0,jz:1,yz:0},{aid:2,pg:1,jz:0,yz:1}]

这篇关于php - Mysql这样的场景如何给表编写查询语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆