这似乎已被问过几次,但我无法让我的查询工作。
我有一个用户表和一个注册详情。
user.id user.name Registration.status Registration.statusname
1 Homer 70 Booked
2 Maggie 70 Booked
2 Maggie 10 Cancelled
3 Bart 70 Booked
4 Lisa 70 Booked
4 Lisa 10 Cancelled
我想要的是查找重复user.id
的查询,删除70并将10保留在registration.id中。
我不希望70删除只是不在查询上。
这是重要的代码部分。
$course = $_POST["course"];
$date= $_POST["date"];
$sql = "SELECT DISTINCT firstname, lastname, data, name, statuscode, statusname, DATE_FORMAT(FROM_UNIXTIME(timestart),'%d/%m/%y') AS timestart,
DATE_FORMAT(FROM_UNIXTIME(timefinish),'%d/%m/%y') AS timefinish
FROM mdl_facetoface
INNER JOIN mdl_facetoface_sessions ON mdl_facetoface_sessions.facetoface=mdl_facetoface.id
INNER JOIN mdl_facetoface_sessions_dates ON mdl_facetoface_sessions.id=mdl_facetoface_sessions_dates.sessionid
INNER JOIN mdl_facetoface_signups ON mdl_facetoface_sessions.id=mdl_facetoface_signups.sessionid
INNER JOIN mdl_user ON mdl_facetoface_signups.userid=mdl_user.id
INNER JOIN mdl_user_info_data ON mdl_user_info_data.userid = mdl_user.id
INNER JOIN mdl_facetoface_signups_status ON mdl_facetoface_signups.id=mdl_facetoface_signups_status.signupid
INNER JOIN mdl_facetoface_status ON mdl_facetoface_signups_status.statuscode=mdl_facetoface_status.id
WHERE name LIKE '%".$course."%'
AND mdl_user_info_data.fieldid ='3'
AND DATE_FORMAT(FROM_UNIXTIME(timestart),'%d/%m/%y') LIKE '%".$date."%'
AND firstname <> 'test'
AND lastname <> 'test'
AND (statuscode='10' OR statuscode ='70')
ORDER BY statuscode DESC
答案 0 :(得分:0)
您应该按连接两个表的列(外键)对其进行分组。
答案 1 :(得分:0)
看看第一个样本我会提供这样的东西:
select
user.id, min(user.name), min(registration.status), max(registration.statusname)
...
group by user.id
这是有效的,因为您知道您只想保持最低状态(10 <70)和最高状态名称(已取消&gt;已预订)。添加更多代码可能会使逻辑变得复杂。
至于您发布的实际查询,图片变得更加模糊,因为我不知道所有这些表格会发生什么。