Php 如果学生的出入境状态为“1”,则罚款将增加1;0“;地位
我有两个表,日志和学生日志,我想选择状态为“in”和“out”的学生id,状态为“0”。如果学生id有in和out,则学生中的惩罚计数将增加 日志 如果学生的状态为“0”,则惩罚将增加1。 日志 请帮我谢谢。试试这个Php 如果学生的出入境状态为“1”,则罚款将增加1;0“;地位,php,mysql,Php,Mysql,我有两个表,日志和学生日志,我想选择状态为“in”和“out”的学生id,状态为“0”。如果学生id有in和out,则学生中的惩罚计数将增加 日志 如果学生的状态为“0”,则惩罚将增加1。 日志 请帮我谢谢。试试这个 UPDATE student SET penalty_count = (penalty_count + 1) WHERE cardcode IN (SELECT GROUP_CONCAT(stud_id) FROM log WHERE status_log = 'IN' AND
UPDATE student SET penalty_count = (penalty_count + 1)
WHERE cardcode IN
(SELECT GROUP_CONCAT(stud_id) FROM log WHERE status_log = 'IN' AND status_log = 'OUT'
AND status = 0 GROUP BY stud_id)
试着这样做:
UPDATE student
SET penalty=penalty + 1
WHERE cardcode IN (
SELECT l1.stud_id FROM log AS l1
JOIN log AS l2 ON l1.stud_id=l2.stud_id AND l2.status_log = 'out' AND l2.status = 0
WHERE l1.status_log = 'in' AND l1.status = 0
GROUP BY l1.stud_id
)
这在没有连接说明的情况下也是可能的。您可以将此
键(stud\u id、status、status\u log)
添加到表日志中,以获得更好的性能
update
penalty
set
penalty_count = penalty_count + 1
where
cardcode IN(
select
stud_id
from
log
where
status = 0
group by
stud_id
having
(sum(status_log = 'in') + sum(status_log = 'out')) = 2
order by
null
)
注意,order by null
用于禁用group by函数的默认排序(解释输出中的filesort),因为更新时不需要对结果进行排序
参见演示在
学生
表中也应该有一个螺柱id
。螺柱id是cardcode sir
UPDATE student
SET penalty=penalty + 1
WHERE cardcode IN (
SELECT l1.stud_id FROM log AS l1
JOIN log AS l2 ON l1.stud_id=l2.stud_id AND l2.status_log = 'out' AND l2.status = 0
WHERE l1.status_log = 'in' AND l1.status = 0
GROUP BY l1.stud_id
)
update
penalty
set
penalty_count = penalty_count + 1
where
cardcode IN(
select
stud_id
from
log
where
status = 0
group by
stud_id
having
(sum(status_log = 'in') + sum(status_log = 'out')) = 2
order by
null
)