0

ここで解決したものと同様の問題がありますが、解決策を試すと、設定が異なるため失敗すると思います..

私は doc テーブルを持っています... (残念ながら古いシステムのため、テーブルを編集することはできません)

+-------+--------+----------+--------+
| Docid | title  | revision | linkid |
+-------+--------+----------+--------+
| 1     | docone | 1        | 1      |
| 2     | doctwo | 1        | 2      |
| 3     | docone | 2        | 1      |
|4      | docone | 3        | 1      |
+-------+--------+----------+--------+

すべてのドキュメントを一覧表示するページで、各ドキュメントの最新のリビジョンのみを一覧表示したいと考えています。たとえば、Doc1 はリビジョン 3 にあるため、他の 2 ではなく 1 つが必要です。Doc2 はリビジョン 1 のみにあるため、その 1 つを表示します。

他の投稿の問題に基づいて、次のようにクエリを書きました......

$query_docs = "
    SELECT `document`.*, doctype.* 
    FROM `document`   
    INNER JOIN doctype    
        ON `document`.iddoctypes = doctype.iddoctypes
    WHERE `document`.revision = (
        SELECT MAX(`document`.revision) AS revision 
        FROM `document`
    )  
    GROUP BY `document`.linkid   
    ORDER BY `document`.doccreation DESC";

ドキュメントの種類を取得するために、別のテーブルにリンクする必要がありました (クエリを難しくするため)。

4

3 に答える 3

0

何か不足していますか?これは完全に簡単に思えます...

SELECT x.*
  FROM my_table x
  JOIN (SELECT title,MAX(revision) max_revision FROM my_table GROUP BY title) y
    ON y.title = x.title 
   AND y.max_revision = x.revision;
于 2013-05-30T16:20:53.647 に答える
0

group by title大げさな推測ですが、(select max(...) ...)サブクエリを追加する必要があると思います。

したがって、完全なステートメントは次のようになります。

$query_docs = "
SELECT `document`.*, doctype.* 
FROM `document`   
INNER JOIN doctype    
    ON `document`.iddoctypes = doctype.iddoctypes
WHERE `document`.revision = (
    SELECT MAX(`document`.revision) AS revision 
    FROM `document`
    --GROUP BY `document`.title
    GROUP BY `document`.linkid
)  
GROUP BY `document`.linkid   
ORDER BY `document`.doccreation DESC";
于 2013-05-30T16:11:24.560 に答える