0

MySQLから呼び出して、必要なものを取得する際に問題が発生し続けます。プロジェクトとエントリという2つのテーブルがあります。私がやろうとしているのは、最新のタイムスタンプ付きエントリを取得することです。SQLクエリは次のとおりです。

SELECT 
    projects.ProjectLogo, projects.ProjectLink, projects.ProjectDescription, 
    entries.EntryNum, entries.Votes, entries.Views, entries.Update 
FROM 
    projects 
    LEFT JOIN entries 
        ON projects.ProjectID = entries.ProjectID 
        AND projects.Media = 'image' 
        AND projects.Type = 'fan-art' 
GROUP BY 
    projects.ProjectID 
ORDER BY 
    entries.Update DESC

問題は、結果は得られますが、最新のエントリは得られないことです。MAX(entries.Update)を使用しましたが、機能しません。助言がありますか?なぜ機能しないのですか?

4

3 に答える 3

0

サブクエリを使用して、テーブルUpdateごとに最新のものを取得できます。サブクエリの結果は、次の 2 つの列で一致するという条件で、2 つの結合ステートメントで再び結合されます:と.ProjectIDentriesProjectIDUpdate

SELECT  projects.ProjectLogo, 
        projects.ProjectLink, 
        projects.ProjectDescription, 
        entries.EntryNum, 
        entries.Votes, 
        entries.Views, 
        entries.Update 
FROM    projects 
        INNER JOIN entries 
            ON  projects.ProjectID = entries.ProjectID 
        INNER JOIN  
        (
            SELECT  a.ProjectID, MAX(a.Update) max_val
            FROM    entries a
            GROUP   BY a.ProjectID
        ) b ON  b.ProjectID = entries.ProjectID AND
                b.max_val = entries.Update
WHERE   projects.Media = 'image' AND 
        projects.Type = 'fan-art' 
ORDER   BY entries.Update DESC
于 2013-03-21T23:49:37.890 に答える
0

結合を、入力日が最新のレコード (行) のみに制限する必要があります。エントリの pk が時系列的に増加している場合は、それを使用できます。

Select p.ProjectLogo, p.ProjectLink, p.ProjectDescription, 
      e.EntryNum, e.Votes, e.Views, e.Update 
From projects p 
   Left Join entries e 
     On e.EntryId =
        (Select(Max(entryId) from entries
         where ProjectID = p.ProjectID)
Where p.Media = 'image' 
    And p.Type = 'fan-art' 
Group By p.ProjectID 
Order By e.Update Desc

それ以外の場合は、二重にネストされたサブクエリが必要です

Select p.ProjectLogo, p.ProjectLink, p.ProjectDescription, 
      e.EntryNum, e.Votes, e.Views, e.Update 
From projects p 
   Left Join entries e 
     On e.EntryId =
        (Select entryId from entries
         where ProjectID = p.ProjectID
            And update =
                (Select max(update) From entries
                 Where ProjectID = p.ProjectID))                        
where p.Media = 'image' 
    And p.Type = 'fan-art' 
Group By p.ProjectID 
Order By e.Update Desc
于 2013-03-21T23:49:48.353 に答える
0

サブクエリを使用して最新のエントリを取得してみてください。

select projectId, max(`update`) as lastUpdate
from entries
group by projectId

そして今、このサブクエリを使用して必要なものを取得します。

select ...
from 
    projects as p
    inner join entries as e on p.projectId=e.projectId
    inner join (
        select projectId, max(`update`) as lastUpdate
        from entries
        group by projectId) as me on e.`update`=me.lastUpdate

これがお役に立てば幸いです

于 2013-03-21T23:51:12.893 に答える