私はクエリを持っていますが、これはいくつかのジョイントで非常に複雑で、ユーザーのすべてのメッセージと、そのメッセージへの最新の投稿 (メッセージ投稿の 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 を取得します。
これを機能させる方法についてのアイデアはありますか?