1

少し背景...

現在、クライアントがログインしてジョブの進行状況を確認したり、コメントを残したりするためのクライアントエリアがあります。クライアントエリアには、ログインしてすべてのジョブを表示できる管理エリアがあります。すべてが正常に機能していますが、少しきれいに分類できるようにしたいと思います。

データベースは4つのテーブルで構成されており、そのうち2つはこのクエリに関連しています...ジョブと投稿。現在、リストには、以下を使用するすべてのクライアントのジョブの完全なリストが表示されています。

$result = mysql_query("SELECT * FROM Jobs ORDER BY date DESC"); 

それで:

<a href="jobdetail.php?clientid='. $row['ClientID'].'&jobid='.$row['JobNumber'].'">'. $row['Username'].' - '. $row['ClientID'].'.'.$row['JobNumber'].' - '.$row['Description'].' - '.$row['Status'].'</a>

ご覧のとおり、詳細はデータベースから取得されてエコーされ、すべてがClientIDとJobNumberからジョブをロードするページにリンクされます。すべてのクライアントはジョブ番号1を持つことができます。たとえば、ClientID:12345とClientID:12346は両方ともJobNumber1を持つことができます。現時点ではこれはすべて正常に機能しますが、上部の投稿テーブルに関連する最新の投稿があり、次に新しい投稿があるジョブを作成したいと思います。

いくつかの調査の後の瞬間、私はこれに到達しました:

SELECT
Jobs.*
FROM Jobs
LEFT JOIN Posts ON Posts.JobNumber=Jobs.JobNumber
GROUP BY
Jobs.ClientID, Jobs.JobNumber
ORDER BY Posts.PostDate

そして、私はすべての結果を取得していますが、投稿の日付順にそれらを取得していません。PostsテーブルからPostDate値を実際に取得していないためだと感じていますが、ロードを試しましたが、何も機能していません。

誰かが私に何かポインタを与えることができれば、それは大いにありがたいです。前もって感謝します。

4

2 に答える 2

1

動作しました:

SELECT
c.ClientID
, j.JobNumber , j.Username , j.Description , j.ClientID , j.Status , j.AdminUnread
, MAX(p.PostDate) as postedOn
FROM Clients c
INNER JOIN Jobs j ON c.ClientID=j.ClientID
LEFT JOIN Posts p ON j.JobNumber=p.JobNumber AND c.ClientID=p.ClientID
GROUP BY
c.ClientID
, j.JobNumber
ORDER BY
postedOn DESC, c.ClientID, j.JobNumber DESC
于 2013-01-24T03:44:16.750 に答える
0

これを試して:

SELECT *  
FROM Jobs j 
INNER JOIN ( SELECT p.* 
             FROM posts p 
             INNER JOIN (SELECT JobNumber, MAX(postdate) postdate 
                         FROM posts GROUP BY jobnumber
                        ) a ON p.JobNumber = a.JobNumber AND a.postdate = p.postdate
           ) p ON p.JobNumber = j.JobNumber 
GROUP BY j.ClientID, j.JobNumber 
ORDER BY p.PostDate;
于 2013-01-19T03:30:39.117 に答える