ホームページ >バックエンド開発 >PHPチュートリアル >mysqlのソートの問題
mysql はデータ リストをクエリします。たとえば、このデータ リストは 1 ページに 5 つのレコードがあります。たとえば、クエリ配列は $user_list であり、この user_list をループします。次に、cc フィールドで並べ替えたいのですが、ユーザー テーブルで発生した問題は、最初のページは通常は小さいページから大きいページへと並べ替えられることです。全体に基づいてデータ全体を並べ替えるのではなく、大きくします。
cc は頻繁に変更されます。 フィールドはデータベースに保存できないため、計算する必要があります。 何か良い解決策があれば教えてください。
ディスカッションに返信します。 )
Calculate CC (aa が複雑すぎない場合) をクエリするときに計算式 aa をステートメントに埋め込むことができ、CC によって直接並べ替えることができます
計算式 aa をステートメントにネストして CC を計算することができます (aa の場合)あまり複雑ではありません)そして直接CCを押してソートするだけです
しかし、例えば私が書いたSQLの距離値は計算できません
$page = $_REQUEST['page'];select * from user limit ($page-1)*5,5;
foreach($user_list as $k=>$v){ // 然后根据某函数比如说 aa 计算出一个新的字段cc $user_list[$k]['cc'] = aa($v['id']);}
$sql = "select id,avg_point,name,xpoint,ypoint,index_img,dp_count,deal_cate_id,ratio,note ,".intval(GetDistance($ypoint,$xpoint,'ypoint','xpoint')*1000)." as distance from ".DB_PREFIX."supplier_location where ".$where;
では、このような msyql カスタム関数 aa(変数 1, 変数 2, テーブル フィールド 1, テーブル フィールド 2) のように実装するにはどうすればよいでしょうか
では、このような msyql カスタム関数 aa(変数 1、変数 2、テーブル フィールド 1、テーブル フィールド 2)
//把你的aa函数写成mysql的函数,然后用sqlselect *,aa(id)cc from table order by cc desc;
http://www.baidu.com/s?wd=mysql%20%E8%87%AA%E5%AE%9A% E4%B9%89%E5%87%BD% E6%95%B0&rsv_spt=1&issp=1&f=8&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=3&rsv_sug4=97&rsv_sug1=3&rsv_sug2=0&inputT=2568
一時テーブル一時テーブルの作成を使用する一時テーブルを作成し、CC を計算します。それをフィールドとして temp に保存し、一時テーブルを並べ替えてページングします。
createtemporary table temp
を使用して一時テーブルを作成し、CC を計算して temp のフィールドとして保存し、一時テーブルを並べ替えてページングします。距離によって並べ替える必要がある場合は、次のようにすることができます:
テーブルに、緯度と経度を格納する X フィールドと Y フィールドがあると仮定します。それぞれ販売者 $x、$y はユーザーの経度と緯度を示します
次に、select * from user ORDER BY abs($x-X), abs($y-Y) limit ($page-1)*5,5; があります。