thinkphp查询多条数据的问题

控制器代码
clipboard.png

出来的数据

clipboard.png

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

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

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

阅读 6.8k
9 个回答

这条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{
//不存在  即时唯一的
}
新手上路,请多包涵

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

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

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

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

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

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

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

上面各位都提到了,总结一下:
如果只想取某个字段的一维数组,可以用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);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题