私はこれを1つのクエリとして実行しようとしていますが、サブクエリが2回しか実行されていないため、JOIN句で可能かもしれないと思っていましたが、同じ行の3倍のロールフィールド?私が考えることができる唯一の方法は、コードから一度サブクエリを実行して、このメインクエリに注入する役割と名前の値を取得することです。サブクエリの重複を減らすことは可能ですか?
SELECT id, isActive, role
FROM accountMembers
WHERE account=:acc
AND isActive=true
AND (
(
name > (SELECT name FROM accountMembers WHERE account=:acc AND id =:id)
AND role = (SELECT role FROM accountMembers WHERE account=:acc AND id =:id)
)
OR role > (SELECT role FROM accountMembers WHERE account=:acc AND id =:id)
)
ORDER BY role ASC, name ASC LIMIT :lim
私はあなたが実際に成し遂げようとしていることを少し失っています。実際の希望の結果は何ですか?あなたの質問には、いくつかのサンプルデータと期待される結果を追加することで利益が得られるでしょう。 Accと:idが設定されているかどうかを表示または議論する必要があります。 – Matt
@Matt order by節を追加しました。最後に受け取った 'accountMember'に基づいて結果をページ付けしています。 'name' – 0xor1
https://stackoverflow.com/questions/3799193/mysql-data-best-way-to-implement-paging大丈夫ですが、あなたが' LIMIT'と 'OFFSET'を使って、 。あなたのデータセットを知らなければ、名前よりも大きい名前のアルファベット順があなたに奇妙な結果を与えるかもしれないようですが、それは例データを見ることなくすべての推測であるため、ついにわかりません。がんばろう – Matt