php - Mysql这样的场景如何给表编写查询语句?
本文介绍了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屋!
查看全文