ホームページ  >  記事  >  バックエンド開発  >  PHPは、配列内にIDが存在するレコードをデータベースから選択し、配列内にその順序で並べます。何をするか

PHPは、配列内にIDが存在するレコードをデータベースから選択し、配列内にその順序で並べます。何をするか

WBOY
WBOYオリジナル
2016-06-13 13:34:151249ブラウズ

PHPは、配列内にIDが存在するレコードをデータベースから選択し、配列内にその順序で並べます。
たとえば、$arr={"5","7",1"","10","3","8"} の場合、ID 値 5、7、1、10 を選択したいとします。データベースから 3 件、8 件のレコードをこの順に並べます。

-----解決策---------

SQL コード
SELECT * FROM テーブル WHERE id IN(5,7,1,10,3,8) ORDER BY FIND_IN_SET(id,'5,7,1,10,3,8');
<br><font color="#e78608">------解決策------------------</font><br>
//私のテスト結果は、PHP のソート速度が MySQL のソート速度よりも優れていることを示しています。NN 回更新した後、PHP が MySQL より遅いのは 1 回だけです。<br><br><?php<br>/ / date_default_timezone_set('アジア/上海');? <br>$link = mysql_connect('localhost','root');<br>mysql_select_db('test');<br><br>$timeS1 = microtime() ; <br>$sql = "SELECT * FROM `lean` WHERE id IN(5,7,1,10,3,8) ORDER BY FIND_IN_SET(id,'5,7,1,10,3,8') " ;<br>//for($i = 1, $i <= 100, $++){<br> $result = mysql_query($sql);<br> while($row = mysql_fetch_array($result ) )<br> {<br> <br> }<br>//}<br>$timeE1 = microtime();<br>echo 'データベース自体によって処理される開始時間と終了時間の差は次のとおりです: '.($ timeE1 - $ timeS1).'<br/>';<br><br>//前の変数による効率に影響を与えないように、最初に PHP 翻訳のメモリを解放します<br>unset($timeS1 );<br>unset( $timeS2);<br>unset($link); //現在のデバッグのためにこれを渡す必要はないので、これも解放します<br>unset( $sql);<br>unset ($result);<br>unset($row);<br><br><br><br>//////////////// //////<br>$timeS2 = microtime();<br>$sql = "SELECT * FROM `lean` WHERE id IN(5,7,1,10,3,8)";<br> $result = mysql_query($sql) ;<br>$data = array();<br>$i = 0;<br>while($row = mysql_fetch_array($result))<br>{<br> $data [$row['id'] ] = $row;<br> $i++;<br>}<br><br>$r = sortdata($data, array(5,7,1,10,3,8) ));<br><br>$timeE2 = microtime();<br>echo 'PHP によって処理される開始時間と終了時間の差は次のとおりです: '.($timeE2 - $timeS2);<br><br>echo ' <pre class="brush:php;toolbar:false">結果のソート<br/&gt ;';<br>print_r($r);<br>echo '
';

//ソート関数
function sortdata( $arr,$order){
$r = array();
$i = 0;
foreach($arr as $key => $value){
$r[$order [$i]] = $value;
$i++;
}
return $r;
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。