這裏是我的查詢,內部查詢給我按日期排序的數組,但如果我使用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