1

私はクエリを持っていますが、これはいくつかのジョイントで非常に複雑で、ユーザーのすべてのメッセージと、そのメッセージへの最新の投稿 (メッセージ投稿の max(id) 部分) を返すようにしています。しかし、特定のメッセージの投稿の総数も表示したいと考えています。すべてのメッセージをプルしたくはありませんが、行の count() を取得するだけです。

カウント部分なしで、現在動作する私のクエリは次のとおりです。

SELECT recipients.readmessage, messages.id AS id, messages.subject, messages.createdat AS messagecreated, messages.userid AS originalposterid, messages.usershortname AS opname, messageposts.id AS messagepostid, messageposts.usershortname AS repliername, messageposts.userid AS replierid, messageposts.updatedat AS messagepostcreated, userpictures.id AS pictureid, userpictures.createdat AS picturedate, userpictures.name AS picname, users.sex 
    FROM recipients 
        INNER JOIN messages ON recipients.messageid = messages.id 
        AND messages.deletedat IS NULL 
            LEFT OUTER JOIN messageposts
            ON messageposts.id =
                 (
                 // HERE IS WHERE I WANT A COUNT//
                 SELECT  max(id) 
                 FROM    messageposts
                 WHERE   messageid = messages.id
                 AND messageposts.deletedat IS NULL
                 )
                INNER JOIN users ON messageposts.userid = users.id 
                AND users.deletedat IS NULL 
                    LEFT OUTER JOIN userpictures 
                    ON userpictures.id =
                             (
                             SELECT  max(id)
                             FROM    userpictures
                             WHERE   userid = users.id
                             AND userpictures.deletedat IS NULL
                             )

    WHERE ( recipients.userid = #currentuser.id# ) 
    AND ( recipients.deletedat IS NULL ) 
    ORDER BY recipients.readmessage ASC,messageposts.updatedat DESC,messages.createdat DESC,userpictures.createdat DESC

挿入する必要がある部分は次のとおりです。

(
SELECT COUNT(id) as totalposts
FROM    messageposts
WHERE   messageid = messages.id
)

これが私が試したものです:

(
 SELECT  max(id) 
 FROM       
    (
    SELECT COUNT(id) as totalposts
    FROM    messageposts
    WHERE   messageid = messages.id
    )
    messageposts
 WHERE      messageid = messages.id
 AND messageposts.deletedat IS NULL
 )

しかし、これにより、あいまいな列名エラーが発生しました。これを次のように変更してみました。

(
 SELECT  max(id) 
 FROM       
    (
    SELECT COUNT(id) as totalposts
    FROM    messageposts
    WHERE   messageposts.messageid = messages.id
    )
    messageposts
 WHERE   messageposts.messageid = messages.id
 AND messageposts.deletedat IS NULL
 )

しかし、無効な列名messageid を取得します。

これを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

0

messagepostsサブクエリへのリンク方法を変更する必要があると思います。

年:

LEFT OUTER JOIN messageposts
    ON messageposts.id =
             (
             // HERE IS WHERE I WANT A COUNT//
             SELECT  max(id) 
             FROM    messageposts
             WHERE   messageid = messages.id
             AND messageposts.deletedat IS NULL
             )

新しい:

LEFT OUTER JOIN
    (
    SELECT 
        messageid AS postmessageid
        ,max(id) AS LatestPost
        ,count(id) AS TotalPosts
    FROM messageposts
    WHERE deletedat IS NULL
    GROUP BY messageid
    ) PostsOnMessage
ON messages.id = PostsOnMessage.postmessageid

次に、上記のフィールドにLatestPostとを追加できます。TotalPosts

于 2013-03-14T12:09:53.417 に答える