2016-07-26 79 views
1

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

您可以發佈此查詢的輸出? –

+0

爲您的訂單添加另一個字段。這裏的問題是,你說你想保留「第一個」,但你沒有定義日期相同時意味着什麼。 – alzee

+0

添加了輸出。 @ user3137702,我的意思是重複的第一個實例,也不能/不會是兩個具有相同日期(除空),但無論哪種方式,如果id值的存在重複我只需要一次。我正在顯示數據,所以當我做一個foreach循環時,我不希望有任何額外的東西,它應該按照最近的約會進行排序。 – nick

回答

1

嘗試指定:

$sql = 'SELECT * 
    FROM (
     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 
      ORDER BY appointment_datetime desc) AS t 
    GROUP BY patient_id'; 

通知的MAX()添加到查詢。

祝你好運!

+0

這隻給出一個最大日期時間的條目,但我會盡力讓它工作,謝謝。 – nick

+1

工作很好,一對夫婦調整! – nick

1

用戶in_array刪除重複的值,然後嘗試推動唯一值到新陣列。

$unique = array(); 
foreach($array as $arr) 
{ 
if(!in_array($arr, $unique)) 
{ 
$unique[] = $arr; 
} 
} 

有了這個,你將得到所有的第一個值。所有重複將被刪除。在你的數組值中使用這個概念。它會像一個魅力要直接在您的查詢的最新條目

相關問題