2016-08-31 1 views
0

Ich habe folgende Tabellen mit Spalten:Wie Daten mit dem Schlüsselwort GROUP BY und ORDER BY aus der Tabelle abgerufen werden?

1) Benutzer

user_id username 

2) Projekte

p_id p_name 

3) project_status

psdi p_id cdid cid sid short_list res_sent status_date 

4) Unternehmen

cid company_name 

5) Status

sid status_name status_order is_cv_sent 

6) projects_log

pl_id cdid project_name  p_id user_id status date_time  

nun in dieser projects_log Tabelle gibt es gleiche p_id Wert existieren.

Ich möchte alle einzigartigen p_id mit neuesten date_time zeigen. als DESC Auftrag wo pl.cdid = $cdid

Ich benutze folgende Abfrage, kann aber nicht die Ergebnisse erhalten. Es zeigt mir nicht alle einzigartigen p_id als date_time DESC bestellen :(

$get_log = mysqli_query($link, "SELECT 
    pl.*, 
    u.username, 
    p.p_name, 
    c.company_name, 
    s.status_name, 
    ps.* 
    FROM projects_log AS pl 
    LEFT JOIN users AS u ON u.user_id = pl.user_id 
    LEFT JOIN projects AS p ON p.p_id = pl.p_id  
    LEFT JOIN project_status AS ps ON ps.p_id = pl.p_id 
    LEFT JOIN company AS c ON c.cid = ps.cid 
    LEFT JOIN status AS s ON s.sid = ps.sid 
    WHERE pl.cdid = '$cdid' GROUP BY pl.p_id 
    ORDER BY pl.pl_id DESC "); 
+0

Betrachten Bereitstellung richtige CREATE und INSERT-Anweisungen UND ein gewünschtes Ergebnis – Strawberry

+0

@Strawberry Aktualisierung meiner Frage –

Antwort

0

unter Abfrage können Sie Gruppe von p_id erreichen und in der Lage werden Werte von max date_time Reihe zu bekommen.

$get_log = mysqli_query($link, "SELECT 
    pl.*, 
    u.username, 
    p.p_name, 
    c.company_name, 
    s.status_name, 
    ps.* 
    FROM (
     select MAX(date_time) as MaxDateTime,p_id from projects_log group by p_id 
    ) as mpl join projects_log AS pl on mpl.MaxDateTime = pl.date_time and mpl.p_id = pl.p_id 
    LEFT JOIN users AS u ON u.user_id = pl.user_id 
    LEFT JOIN projects AS p ON p.p_id = pl.p_id  
    LEFT JOIN project_status AS ps ON ps.p_id = pl.p_id 
    LEFT JOIN company AS c ON c.cid = ps.cid 
    LEFT JOIN status AS s ON s.sid = ps.sid 
    WHERE pl.cdid = '$cdid' 
    ORDER BY pl.pl_id DESC "); 
+0

WOW, ich denke, es funktioniert. Lassen Sie mich noch einmal überprüfen ... aber können Sie mir sagen, was ist das Problem in meinem Code? –

+0

Wenn wir Gruppe tun Mit einer Spalte werden dann Werte aus jeder Zeile dieses bestimmten Typs abgerufen pe. Um die Werte der Zeile mit maximalem Datum zu erhalten, sollte Self-Join wie in der obigen Abfrage verwendet werden. Vergiss nicht, meine Antwort zu akzeptieren, wenn es gut funktioniert hat. –

+0

Ja natürlich ... –