php - 求一条sql语句
PHP中文网
PHP中文网 2017-04-10 18:09:05
[PHP讨论组]

数据表结构是这样子

表一(action):
id name
1  吃饭
2  说话
3  唱歌

表二(log):
id action_id status
1      1      0
2      1      1
3      1      1
4      1      1
5      2      1
5      2      1
7      2      1
8      3      0 
9      3      1

求出表一(id)对应表二中(action_id)存在数据总和,以及status=1的数量等于总和的action数据出来:
比如:
action表里的第一条id为1的数据,在log表里的记录总数为4条,但是stauts=1的记录却只有3条,那么过滤掉不取;
然后我们来看action表里第二条id为2的数据,在log表里的记录总数为3status为1的记录也有3条,那么就把action表里id为2的数据取出来,依次类推...

  1. 求一条sql语句或者能做到这样效果的方法

  2. 可以实现分页效果,每次取出n条action表满足条件的数据

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
伊谢尔伦

SELECT id,name FROM action WHERE NOT EXISTS (SELECT * FROM log WHERE action.id=log.action_id and log.stauts=0) and id =1 limit 0,10

这是取一条的,分页就是加上limit后面的值,你需要自己算,假如取所有id的你把id=1去掉就行了!

简单解释下:
你的需求是需要 log里有记录且无stauts=0的,其实你的需求是可以这样想的

sql的意思 就是 取log表里 该id没有stauts=0的action!

本需求的关键就在于log表里有stauts=0的不取该action,那排除他就好了!

具体是要了解NOT EXISTS 和 exists的用法
http://www.cnblogs.com/mytech...

迷茫
select * from action where id not in (select action_id from log where status=0) limit 0,2;
PHP中文网

select a.* from action a , log l where a.id=l.action_id and l.status=1 limit 0, 10

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号