この投稿は xviphackl によって最終編集されました: 2013-07-30 16:14:18
開発プロセス中に非常に複雑な問題に遭遇しました。
つまり、新しく公開されたコンテンツ、またはコンテンツ リスト全体の任意の場所にあるコンテンツを、コンテンツ リスト内の指定した位置に移動したいのです。例:
order ID
---------------
4 1
3 2
2 3
1 4
ID 4 のデータを ID に移動したい2の下の部分。私の現在の解決策は、ターゲットIDのORDER+1(-1)でソートすることですが、このような順序付きリストでは、ORDERの同じ値が表示されます。このとき、ソートの最終結果は少し間違っています。かなり予想外でした。
この問題を解決する方法はありますか?
ディスカッション(解決策)への返信
`order`、IDで並べ替えます
並べ替えはIDで並べ替えても同じです
同意を遵守する限り、予期せぬ結果は発生しません
上記のように、画像内のデータについて、role_id 1 のデータを 10 より上位にランク付けしたいと考えていますが、結果は予期せぬものになります。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この種の問題が発生したら、SQL ステートメントを変更するだけではだめですか?
たとえば、上の図のデータでは、role_id 1 が 10 より大きいデータをランク付けしたいと考えていますが、結果は予期せぬものになります。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この種の問題が発生したら、SQL ステートメントを変更するだけではだめですか?
desc は逆の順序で、大きいものから小さいものへと配置されています。 もちろん、10 は 1 の前にランク付けされます。 role_id には asc を使用します
テーブルには多くのコンテンツを渡す必要があります。人為的な介入を通じて重要な人物を指定された場所に連れて行きます! ! !
ルールはありません。「上」と「下」を自由に動かしてください。ご指摘の DISCUZ のソートが異なるため、現在は型を区別せずに 1 つのフィールドのみを検討しています。数値のサイズのみが、このコンテンツの位置を決定します。
こうあるべきだけど、ちょっと汚い。
たとえば、上の図のデータでは、role_id 1 のデータを 10 より上にランク付けしたいと考えていますが、結果は予期せぬものになります。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この種の問題が発生したら、SQL ステートメントを変更するだけではだめですか?
desc は逆順で、大きいものから小さいものへと配置されています。 もちろん、10 は 1 の前にランク付けされます。 role_id には asc を使用します
OK 、
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` ASC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これは当てはまると思いますか?
逆に、ID 10 のものを ID 1 のものより上位にしたいのですが、常に SQL を変更することはできませんか?
たとえば、上の図のデータで、role_id 1 のデータを 10 より上位にランク付けしたいと考えていますが、結果は予期せぬものになります。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この種の問題が発生したら、SQL ステートメントを変更するだけではだめですか?
desc は逆順で、大きいものから小さいものへと配置されています。 もちろん、10 は 1 の前にランク付けされます。 role_id には asc を使用します
OK 、
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` ASC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これは当てはまると思いますか?
逆に、ID 10 のものを ID 1 のものより上位にしたいのですが、常に SQL を変更することはできませんか?
手動で指定したい場合は、10 を上にしたい場合は、この関数に 10 を渡すだけです。同じことです。つまり表示時の制御です。たとえば、上の図のデータでは、role_id 1 のデータを 10 より上位にランク付けしたいと考えていますが、結果は予期せぬものになります。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この種の問題が発生したら、SQL ステートメントを変更するだけではだめですか?
desc は逆順で、大きいものから小さいものへと配置されています。 もちろん、10 は 1 の前にランク付けされます。 role_id には asc を使用します
OK 、
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` ASC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これは当てはまると思いますか?
逆に、ID 10 のものを ID 1 のものより上位にしたいのですが、常に SQL を変更することはできませんか?
手動で指定したい場合は、10 を上にしたい場合は、この関数に 10 を渡すだけです。同じことです。つまり表示時の制御です。
重要なのは、どれが上でどれが下かをどのように判断するかです。これは問題だ、?具体的な方法を教えていただけますか?
如,上图的数据,我现在想把role_id为1的数据排到10的上面,但是,结果出乎了意料。
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` DESC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
不能一遇到 这种问题, 就更改一次SQL语句?
desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用asc
OK ,
SELECT * FROM `tbl` ORDER BY `role_sort` DESC , `role_id` ASC
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
你说是这样子是吗。
反之,我想把ID为10的排到ID为1的上面,请问该怎么做,不能老是去更改SQL?
如果你想人为指定,就写个函数,你想让10在1的上面,就传个10进这个函数,显示的时候让10在上面,想让1在上面是同样的道理。就是说,在显示的时候,进行控制。
关键是怎么去确定哪个在上面,哪个在下面。这是一个问题,?可以说说你的具体的办法么?
这要看你自己定的规则了,你不是要通过人为的干预让“自认为”重要的内容到制定的位置吗?那你得先把规则搞清楚,然后才能根据规则出代码。明白吗?