thinkphp查询多条数据的问题
高洛峰
高洛峰 2017-04-11 10:23:37
[PHP讨论组]

控制器代码

出来的数据

没错,我想的数据都在了,但是我想提取全部的name的值怎么做? 我知道其中一个是可以这样表示 $shuju0 。但是我不是要一个,而是多个,那该怎么办?主要是多维数组啊,这个键值对怎么解决

我是用来弄ajax的用户名的唯一性的,如果大神们有什么更好的方法取这个值来比较,留下言谢谢

要解决的问题是:我要弄ajax的用户名的唯一性,所以要这些name字段的全部数据取比较,但是$shuju0 $shuju1 $shuju2 我不可能一个个拿去比较啊,所以该怎么解决,肯定是用一个变量保存起来然后拿去比较

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(9)
PHP中文网

这条PHP 代码最终生成的SQL语句为

select `name` from `student` where `nihao`=1

最终只会获取到所有符合nihao为1的name的值。

而你的提问有点太笼统。说不出来你要解决什么。这个取出来的就是二维数组,格式如下

$shuju[0]['name']
$shuju[1]['name']
$shuju[2]['name']
$shuju[3]['name']
...

如果只是想判断用户名是不是存在,这最简单了,不要全部取出来,如果这样为什么还用数据库,数据库不仅仅是用来存数据的,还可以进行数据分析。

比如查询是否是为唯一的可以前台吧用户输入的用户名ajax发送给后台。
后台进行比较

$name=I('post.name');
$where['name']=$name;
$model=M('student');
$r=$model->where($where)->find();
if ($r!==false){
//存在name,即不是唯一
}else{
//不存在  即时唯一的
}
PHP中文网

新建一个$re= array();然后foreach循环$data

天蓬老师

既然是TP 那么就直接 getField("name",true);

也可以在现有的基础上使用array_column函数取出name的一维数组再通过in_array判断

ps: 话说咋不直接把要验证唯一的name加入sql中查询呢?

PHPz

保证名称唯一性你这样全部读出来,再匹配...如果数据大的话还不卡死了.
你拿到用户输入的name值,再去数据库里查询是不是存在,不用先全读出来

PHP中文网
tp 里面不知道有没有特别的ORM方法,laravel 里面有专门取一列的方法pluck 
笨一点的方法,不行的话可以循环一下
好一点的方法,推荐使用redis的集合set,把所有的name都放集合里面,后面的数据一看就知道用户名是否唯一,也减少数据库的查询压力
ringa_lee

$shuju = $model->field("GROUP_CONCAT(name) as name2")->find();
$shuju['name2'] 就是所有的name

PHP中文网

上面各位都提到了,总结一下:
如果只想取某个字段的一维数组,可以用getField('name',true);

如果要验证唯一性,没听过把所有的拿出来比较的,这个性能很差的,不可能这样做的。

查找一下就行了:

if($model->where(array('name"=>$name))->find()){
  $this->error("用户名已经存在");
}
天蓬老师
getField('name',true)
大家讲道理

不太懂你的键值对,如果你要ID的话 你就应该用$model->getFiled('user_id,name',true);取出来的效果就是user_id为键,name为值的一维数组,然后直接in_array一次就可以搞定你的唯一性,但是如果你只要name的话,索引为0开始的那种,你就直接用$model->getFiled('name',true);

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号