从SQL查询中删除重复项

时间:2016-02-04 15:50:38

标签: mysql duplicates

这似乎已被问过几次,但我无法让我的查询工作。

我有一个用户表和一个注册详情。

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

2 个答案:

答案 0 :(得分:0)

您应该按连接两个表的列(外键)对其进行分组。

答案 1 :(得分:0)

看看第一个样本我会提供这样的东西:

select
    user.id, min(user.name), min(registration.status), max(registration.statusname)
...
group by user.id

这是有效的,因为您知道您只想保持最低状态(10 <70)和最高状态名称(已取消&gt;已预订)。添加更多代码可能会使逻辑变得复杂。

至于您发布的实际查询,图片变得更加模糊,因为我不知道所有这些表格会发生什么。