php从数据库中选取ID在数组中存在的记录,并按数组中的顺序排列? 比如$arr={"5","7",1"","10","3","8"},要从数据库中选取ID值为5,7,1,10,3,8的记录,并且按这个顺序排列。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SELECT * FROM table WHERE id IN(5,7,1,10,3,8) ORDER BY FIND_IN_SET(id,'5,7,1,10,3,8'); 真棒! 这个find_in_str用得好 not str , find_in_set(表很大的情况)这样的sql效率可能会很低,建议查询出来后用代码来排序 //我的测试结果显示PHP排序速度优于MySQL排序速度,刷新了NN次只有1次是PHP慢过MySQL的,请大家也测试一下吧<?php//date_default_timezone_set('Asia/Shanghai'); $link = mysql_connect('localhost','root');mysql_select_db('test');$timeS1 = microtime();$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')";//for($i = 1, $i <= 100, $++){ $result = mysql_query($sql); while($row = mysql_fetch_array($result)) { }//}$timeE1 = microtime();echo '由数据库自行处理的起止时差为: '.($timeE1 - $timeS1).'<br/>';//释放译一下php的内存先,免得因为前面的变量影响了效率unset($timeS1);unset($timeS2);unset($link); //已经自动设定了活动数据库了,当前调试不用传递这个,所以把它也释放了吧unset($sql);unset($result);unset($row);//////////////////////$timeS2 = microtime();$sql = "SELECT * FROM `lean` WHERE id IN(5,7,1,10,3,8)";$result = mysql_query($sql);$data = array();$i = 0;while($row = mysql_fetch_array($result)){ $data[$row['id']] = $row; $i++;}$r = sortdata($data, array(5,7,1,10,3,8));$timeE2 = microtime();echo '由PHP处理的起止时差为: '.($timeE2 - $timeS2);echo '<pre>排序结果<br/>';print_r($r);echo '</pre>';//排序函数function sortdata($arr,$order){ $r = array(); $i = 0; foreach($arr as $key => $value){ $r[$order[$i]] = $value; $i++; } return $r;} 咳咳, 麻烦把php部分和mysql互换后(先php再mysql)再测一下 :) 关于fpdf页边距的问题 修改集成开发环境的PHP版本。 \u7b2c1\u8bdd 这样的字符怎么用PHP语句转成中文? 求助日期转换,得到距离January 1 1970 00:00:00 GMT 的秒数?????? function p(){ print "ok"; } $p1 = p; 如何判断$p1是函数? 老问题,如何在window.open里获取值 php无法连接远程的MYSQL?救急!!!! MYSQL的问题 注册时总是提示用户名已被注册 通达信day文件 成交额字段 如何判断iis或者Apache是否开启rewrite 关于403 forbidden问题
not str , find_in_set
(表很大的情况)这样的sql效率可能会很低,建议查询出来后用代码来排序
//date_default_timezone_set('Asia/Shanghai');
$link = mysql_connect('localhost','root');
mysql_select_db('test');$timeS1 = microtime();
$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')";
//for($i = 1, $i <= 100, $++){
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
}
//}
$timeE1 = microtime();
echo '由数据库自行处理的起止时差为: '.($timeE1 - $timeS1).'<br/>';//释放译一下php的内存先,免得因为前面的变量影响了效率
unset($timeS1);
unset($timeS2);
unset($link); //已经自动设定了活动数据库了,当前调试不用传递这个,所以把它也释放了吧
unset($sql);
unset($result);
unset($row);//////////////////////
$timeS2 = microtime();
$sql = "SELECT * FROM `lean` WHERE id IN(5,7,1,10,3,8)";
$result = mysql_query($sql);
$data = array();
$i = 0;
while($row = mysql_fetch_array($result))
{
$data[$row['id']] = $row;
$i++;
}$r = sortdata($data, array(5,7,1,10,3,8));$timeE2 = microtime();
echo '由PHP处理的起止时差为: '.($timeE2 - $timeS2);echo '<pre>排序结果<br/>';
print_r($r);
echo '</pre>';//排序函数
function sortdata($arr,$order){
$r = array();
$i = 0;
foreach($arr as $key => $value){
$r[$order[$i]] = $value;
$i++;
}
return $r;
}