サブジェクトを含む 1 つのテーブル、ユーザー データ用の 1 つのテーブル、およびユーザー サブスクリプションを格納するための 1 つのテーブルの 3 つのテーブルがあります。
ユーザーはオプションでサブスクライブされる場合とされない場合があるため、すべてのユーザー リストとそのサブスクリプション ステータスを取得するには、左結合を次のように使用します。
SET @rnum = 0;
SELECT (@rnum :=@rnum + 1) AS rn, user.user_name, subs.status
FROM user_tbl LEFT JOIN subs_tbl ON user.uid = subs.uid LIMIT 0, 10;
一度にこの出力全体を使用していましたが、データが大きくなったため、この出力のページングをアプリケーションに実装しました。
ページングのために、row_num メカニズムを作成しました。最後に表示された row_num を保存し、次のページでは last_num から表示します。
今、最初または最後に購読したユーザーを並べ替えたいので、使用しました
SELECT (@rnum :=@rnum + 1) AS rn, user.user_name, subs.status
FROM user_tbl LEFT JOIN subs_tbl ON user.uid = subs.uid ORDER BY subs.status LIMIT 0, 10;
これは行番号を提供していますが、私が望んでいたものではありません。最初に行番号を提供してからソートを行うため、希望どおりの結果が得られません。
だから私はフォローするのに助けが必要です、
- ページングのより良い方法はありますか?
- Left Join の代用はありますか (すべてのユーザー情報が必要なため、null 値も必要です)。
- SQL結果に番号を付ける他の方法はありますか。
- 関数に関する PHP や、この場合に役立つものはありますか。
[これは私の実際の問題から作成されたサンプルです。私の実際の問題では、複数の結合とサブクエリを含む巨大なクエリがあるため、このクエリのネストと番号付けは不可能です]