Php 在MySQL中删除多案例查询中的重复项
我有以下疑问Php 在MySQL中删除多案例查询中的重复项,php,mysql,mysqli,duplicates,Php,Mysql,Mysqli,Duplicates,我有以下疑问 SELECT student.StudentID, student.`Name`, CASE WHEN attendance.date = '2015-09-07' and attendance.StudentID IS NOT NULL THEN 'Present' ELSE 'Absent' END AS '2015-09-07', CASE WHEN attendance.date = '2015-09-14' and attend
SELECT
student.StudentID,
student.`Name`,
CASE
WHEN attendance.date = '2015-09-07' and attendance.StudentID IS NOT NULL THEN
'Present'
ELSE
'Absent'
END AS '2015-09-07',
CASE
WHEN attendance.date = '2015-09-14' and attendance.StudentID IS NOT NULL THEN
'Present'
ELSE
'Absent'
END AS '2015-09-14'
FROM
student
LEFT JOIN attendance ON student.StudentID = attendance.StudentID`
这给了我以下结果:
我试过按学生分组使用。StudentID
,但结果不正确。在“k1052280”的“2015-09-14”列中显示“缺席”,而不是当前
我越来越
我想得到这个结果
CREATE TABLE
student(
StudentIDvarchar(8)不为空,
Namevarchar(100)不为空,
Emailvarchar(254)字符集latin1不为空,
WorkshopIDint(4)不为空,
主键(
StudentID),
唯一键
StudentID(
StudentID,
Email),
键
WorkshopID(
WorkshopID),
约束
student\u ibfk\u 1外键(
WorkshopID)引用
WorkshopID(
WorkshopID)
)ENGINE=InnoDB默认字符集=utf8代码>
创建表
考勤(
AttendanceIDint(10)非空自动增量,
StudentIDvarchar(8)不为空,
DateDate不为空,
时间时间不为空,
主键(
AttendanceID),
唯一键
UNIQUE\u index(
StudentID,
Date),
约束条件
Attention\u ibfk\u 1外键(
StudentID)引用
student(
StudentID)
)ENGINE=InnoDB AUTO_INCREMENT=194默认字符集=utf8代码>
插入学生值('k1052280','Ali Shaikh','k1052280@something.com', '101');
插入学生值('k1052287','McKenzie Roth','Quisque@penatibus.edu', '102');
插入学生值('k1052288','Dacey Sullivan','sollicitudin.adipsing。ligula@semmollisdui.com', '103');
插入学生值('k1052289','Callie Williamson','elementum@orciPhasellus.com', '104');
插入学生值('k1052290','Savannah Hyde','nec.metus。facilisis@nonummyut.co.uk', '101');
插入学生值('k1052291','Paul Tyson','semper.erat。in@ipsumleoelementum.net', '102');
插入学生值('k1052292','Nerea Ramos','gravida.sagittis。Duis@lacinia.edu', '103');
插入学生值('k1052293','Mark Mills','Pelletsque。massa@blanditviverra.co.uk', '104');
插入学生值('k1052294','Zelda Cantu','ut@fringillaporttitorvulputate.org', '101');代码>
插入考勤值('168','k1052280','2015-09-07','00:00:00');
插入考勤值('169','k1052287','2015-09-09','00:00:00');
插入考勤值('170','k1052288','2015-09-11','00:00:00');
插入考勤值('171','k1052289','2015-09-11','00:00:00');
插入考勤值('172','k1052290','2015-09-14','00:00:00');
插入考勤值('173','k1052291','2015-09-16','00:00:00');
插入考勤值('174','k1052292','2015-09-18','00:00:00');
插入考勤值('175','k1052293','2015-09-18','00:00:00');
插入考勤值('176','k1052294','2015-09-21','00:00:00');
插入考勤值('177','k1052295','2015-09-23','00:00:00');
插入到考勤值('178','k1052296','2015-09-25','00:00:00');
插入考勤值('179','k1052297','2015-09-25','00:00:00');
插入考勤值('183','k1052288','2015-09-14','00:00:00');
插入考勤值('187','k1052290','2015-09-07','00:00:00');
插入到考勤值('188','k1052280','2015-09-21','10:30:00');
插入考勤值('193','k1052280','2015-04-05','00:00:00')代码>
这个查询将起作用-
SELECT Student.StudentID, Student.NAME, IF ( ( SELECT distinct 1 FROM attendance WHERE attendance.StudentID = student.StudentID AND date = '2015-09-07' ) = 1, 'Present', 'Absent' ) AS '2015-09-07', IF ( ( SELECT distinct 1 FROM attendance WHERE attendance.StudentID = student.StudentID AND date = '2015-09-14' ) = 1, 'Present', 'Absent' ) AS '2015-09-14' FROM student as student;
范例-
您可以像这样在列中使用子查询
创建表格:创建表格student
(
id
int(11)非空自动增量,
name
varchar(20)默认为空,
主键(id
)
)ENGINE=InnoDB AUTO_INCREMENT=8默认字符集=1
创建表格:创建表格参加
(
id
int(11)非空自动增量,
stud\u id
int(11)默认为空,
date
varchar(20)默认为空,
主键(id
),
键螺柱id
(螺柱id
),
约束参加ibfk\u 1
外键(stud\u id
)参考student
(id
)
)ENGINE=InnoDB AUTO_INCREMENT=11默认字符集=1
插入数据-
将值(1,'hitesh')、(2,'mundra')、(3,'sumit')、(4,'ashish')插入student
(id
、name
)中;
将值(1,1,'05-04-2015')、(2,1,'05-04-2015')、(3,1,'06-04-2015')、(4,1,'06-04-2015')、(5,2,'05-04-2015')、(6,3,'05-04-2015')、(7,3,'05-04-2015')、(8,4,'06-04-2015')插入出席
结果查询
select id , name , if((select distinct 1 from attend where stud_id=s.id and date = '05-04-2015')=1,'Present','Absent') as '05-04-2015' ,if((select distinct 1 from attend where stud_id=s.id and date = '06-04-2015')=1, 'Present' , 'Absent') as '06-04-2015' from student as s;
你想看到什么结果?@TimBiegeleisen我想看看他们是否在场,如果他们在每个日期都缺席,你还没有给我们一个规则,告诉我们如何使用k1052280
在两行之间进行选择。请解释你的逻辑。学生“萨凡纳”怎么能同时“缺席”和“在场”?您的逻辑有问题。该表有问题,一个人不应该有多个条目,我认为您需要更改初始查询,这样每次修改我的db时,它只会返回一行给您,我得到这个错误[Err]1242-子查询返回多行使用此查询-选择