扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
thinkphp 3.2 sql语句distinct用法
创新互联公司技术团队十余年来致力于为客户提供成都网站制作、做网站、高端网站设计、网络营销推广、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了成百上千家网站,包括各类中小企业、企事单位、高校等机构单位。
DISTINCT 方法用于返回唯一不同的值 。
例如:
$Model-distinct(true)-field('name')-select();
生成的SQL语句是: SELECT DISTINCT name FROM think_user
试编写代码示例如下:
?php
//连接数据库
$db = new mysqli('localhost','test','test','test');
if ($db-connect_errno) {
printf("连接数据库失败: %s\n", $db-connect_error);
exit();
}
//对数据库根据时间字段按降序排序,并抽取前面的40条记录
$data = $db-query('select * from 数据表名 order by 时间字段名 desc limit 40');
$rows = $data-fetch_all(MYSQLI_ASSOC);
//随机生成 5 条记录数组
$rand_arr = array_rand($rows, 5);
//根据生成的随机数组,输出记录
for($i=0;$i5;$i++)
{
echo $rows[$rand_arr[$i]]['name'].' | '.$rows[$rand_arr[$i]]['description'].' | '.$rows[$rand_arr[$i]]['update_time'].'br/';
}
?
示例运行截图:
本人用ThinkPHP3.2,今天正在开发一个需要分组显示的功能,可是从数据库中把相应数据读取后直接用group分组,结果每组显示的是最老的记录,我的需求是要显示每组的最新记录。在网上大搜一翻后,未果,本人决定自行研究,现将方法记录于此以防遗忘。
其实很简单,以供就两步:
第一步:
将符合条件的数据全部取出,暂不用group分组,作为子查询:
[php] view plain copy
$subQuery = $model-field('id,name')-table('tablename')-where($where)-order('time desc')-select(false);
第二部:
利用子查询进行查询分组
[php] view plain copy
$model-table($subQuery.' a')-group('field')-select();span style="font-family: Arial, Helvetica, sans-serif;" /span
好了,思路就是这样。希望对大家有帮助!
$sql="select * from mytb order by time desc limit 5"
不足5条,没关系。
凡事多尝试。
利用自增字段,把要查询的数据表的id设置为自增。查询数据时,order by id desc,取第一条就是最新的。
利用时间,要查询的数据表中增加时间字段,查询时,order by time desc,取第一条就是最新的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流