这里是我的查询,内部查询给我按日期排序的数组,但如果我使用group by它不断随机重复,而不是第一个或最后一个。在我的情况下,可能会有多个约会与同一个患者ID,但我只需要最新的。有没有一种方法可以使用PHP来保持重复值的第一次出现,并在保留日期排序的同时移除其余部分,或者在查询中执行该操作?如何通过值删除重复的数组元素并保留最新条目?
$sql = 'SELECT *
FROM (
SELECT a.patient_id, a.appointment_datetime, b.first_name, b.last_name, b.email
FROM '.TABLE_APPOINTMENTS.' a, '.TABLE_PATIENTS.' b
WHERE doctor_id='.$doctor_id.' AND a.patient_id = b.id
ORDER BY appointment_datetime desc) AS t
GROUP BY patient_id';
输出:内部查询的
Array ([0] => Array ([patient_id] => 1 [appointment_datetime] =>
[1] => Array ([patient_id] => 2 [appointment_datetime] =>)
[2] => Array ([patient_id] => 3 [appointment_datetime] =>)
[3] => Array ([patient_id] => 5 [appointment_datetime] =>
[4] => Array ([patient_id] => 20 [appointment_datetime] => 2016-06-29 17:30:00))
输出:
Array ([0] => Array ([patient_id] => 20 [appointment_datetime] => 2016-07-14 17:00:00
) [1] =>Array ([patient_id] => 20 [appointment_datetime] => 2016-07-05 23:00:00)
[2] => Array ([patient_id] => 20 [appointment_datetime] => 2016-06-29 17:30:00)
[3] => Array ([patient_id] => 20 [appointment_datetime] =>
[4] =>Array ([patient_id] => 20 [appointment_datetime] =>)
[5] = Array ([patient_id] => 20 [appointment_datetime] =>)
[6] => Array ([patient_id] => 1 [appointment_datetime] =>)
[7] => Array ([patient_id] => 2 [appointment_datetime] =>)
[8] => Array ([patient_id] => 3 [appointment_datetime] =>)
[9] => Array ([patient_id] => 5 [appointment_datetime] =>))
溶液:
$sql = 'SELECT a.patient_id, max(a.appointment_datetime), b.first_name, b.last_name, b.email
FROM '.TABLE_APPOINTMENTS.' a, '.TABLE_PATIENTS.' b
WHERE doctor_id='.$doctor_id.' AND a.patient_id = b.id
GROUP BY a.patient_id ORDER BY a.appointment_datetime';
您可以发布此查询的输出? –
为您的订单添加另一个字段。这里的问题是,你说你想保留“第一个”,但你没有定义日期相同时意味着什么。 – alzee
添加了输出。 @ user3137702,我的意思是重复的第一个实例,也不能/不会是两个具有相同日期(除空),但无论哪种方式,如果id值的存在重复我只需要一次。我正在显示数据,所以当我做一个foreach循环时,我不希望有任何额外的东西,它应该按照最近的约会进行排序。 – nick