有关数据检索的更多内容_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

有关数据检索的更多内容

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:内容更多检索数据
黑客防线网安网讯:  WebjxCom提示:我们已经知道使用模型内置方法find()对数据库表进行数据检索的基本方法。find()方法的确非常强大,而且我们可以使用它来完成复杂的查询。我们将会学习更多有关find(...
  WebjxCom提示:我们已经知道使用模型内置方法find()对数据库表进行数据检索的基本方法find()方法的确非常强大而且我们可以使用它来完成复杂的查询我们将会学习更多有关find()方法的内容了解如何通过它来执行复杂的查询。我们也将学习如何使用CakePHP提供的其他数据检索
  
  有关数据检索的更多内容
  
  我们已经知道使用模型内置方法find()对数据库表进行数据检索的基本方法。find()方法的确非常强大,而且我们可以使用它来完成复杂的查询。我们将会学习更多有关find()方法的内容,了解如何通过它来执行复杂的查询。我们也将学习如何使用CakePHP提供的其他数据检索技巧。
  
  --------------------------------------------------------------------------------
  
  有关find()方法的更多内容
  
  find()方法非常灵活,它可以实现SQL语言中SELECT查询语句所能实现的所有结果。比如,我们只检索书名以字母“A"开头并按照ISBN书号降序排列的前两本书的书号字段和作者名字字段,我们曾需要写出下面这个SQL查询语句:
  
  SELECT`Book`.`isbn`,`Book`.`title`,`Book`.`author_name`
  
  FROM`books`AS`Book`
  
  WHERE`Book`.`title`LIKE'A%'
  
  ORDERBY`Book`.`isbn`DESC
  
  LIMIT2;
  
  在CakePHP中,我们可以通过像下面这样使用find()方法来得到同样的结果。
  
  find(
  
  'all',
  
  array(
  
  'conditions'=>array('Book.title'=>'LIKEA%'),
  
  'fields'=>array(
  
  'Book.isbn',
  
  'Book.title',
  
  'Book.author_name'
  
  ),
  
  'order'=>'Book.isbnDESC',
  
  'limit'=>2
  
  )
  
  );
  
  [在条件(condition)中,为字段添加上模型名称前缀(像写成Book.title而非title)是一个很好的习惯。当我们需要调取相关模型中的数据并且结果中有相同的字段名称时,这个习惯就尤其重要。另外它也改善了代码的清新度
  
  ]
  
  find()方法接受两个参数:$type(类型)和$constraints(约束)。$type(类型)是一个用来定义查询“类型”的字符串。$type可以设成下面这三种类型中的一个
  
  all:find方法会按照给定的排序方式和个数限制返回所有符合条件的记录。
  
  first:这个方法只返回符合约束条件的首条记录
  
  count:会返回查询结果中所包含记录的总数量。
  
  正如我们从上一个例子中所看到那样,我们可以以关联数组(associativearray)的形式在第二个参数$constraints中指定其他查询约束。$constraints参数的关联数组可以有如下键(key)
  
  conditions(条件):条件(conditions)可应用于取代查询语句中的WHERE子句。默认值是1=1,这表示没条件约束。
  
  fields(字段):查询结果应该返回的字段范围。如果没有指明,它会返回所有字段。当find()函数的第一个参数$type被设置成count时,该参数不可用。
  
  order(排序):这个字符串定义了查询语句中ORDERBY子句的内容。如果order排序没有指明,那么SQL查询中将不会添加有ORDERBY子句。查询类型是count是,该参数也不可用。
  
  limit(限制):该整数指明了返回记录的最大数量。如果没指定limit,那么函数会返回所有符合条件的记录。只有当查询类型是all时,它才可用。
  
  offset(偏移值):这个参数定义了首个返回记录的偏移值。默认值是0.只有当type参数是all时,该设置才有效。
  
  为了便于读者更清楚地了解这个概念,我们将会快速浏览下面这些表明了find()用法的例子:
  
  1,如果你想知道书名以字母“A”开头的书的数目,我们会在BooksController(Books控制器中)添加如下代码:
  
  $count=$this->Book->find('count',array('conditions'=>
  
  array('Book.title'=>'LIKEA%'));
  
  ItexecutesthefollowingSQLquery:
  
  它会执行如下SQL查询
  
  SELECTCOUNT(*)AS`count`FROM`books`AS`Book`WHERE
  
  `Book`.`title`LIKE'A%';
  
  当find()方法的$type参数设置成count时,查询返回的结果是一个整数。在这个例子中,$count变量的值可能是2.
  
  2,如果我们想查询id最大书本所对应的书号(ISBN)和书名,我们会使用下面这个代码
  
  $book=$this->Book->find('first',
  
  array(
  
  'fields'=>array('isbn','title'),
  
  'order'=>'Book.idDESC'
  
  )
  
  );
  
  该代码会执行如下SQL语句
  
  SELECT`Book`.`isbn`,`Book`.`title`FROM`books`AS`Book`
  
  WHERE1=1ORDERBY`Book`.`created`DESCLIMIT1;
  
  储存在$book变量中的结果会是下面这个样子:
  
  Array
  
  (
  
  [Book]=>Array
  
  (
  
  [isbn]=>1847192971
  
  [title]=>BuildingPowerfulandRobustWebsites
  
  withDrupal6
  
  )
  
  )
  
  3,如果你想找出某个作者所写的所得书并按照书名来排序,那么下面这个代码可以达到此目的:
  
  $books=$this->Book->find('all',
  
  array(
  
  'fields'=>array('title'),
  
  'conditions'=>array(
  
  'Book.author_name'=>'LIKEDavidBarnes'
  
  ),
  
  'order'=>'Book.titleASC'
  
  )
  
  );
  
  上面这段代码将会执行下面这个SQL查询
  
  SELECT`Book`.`title`FROM`books`AS`Book`WHERE`Book`.`author_
  
  name`LIKE'DavidBarnes'ORDERBY
  
  `Book`.`title`ASC
  
  上面这段查询会返回如下的结果:
  
  Array
  
  (
  
  [0]=>Array
  
  (
  
  [Book]=>Array
  
  (
  
  [title]=>Howtowritecomputerbooks
  
  )
  
  )
  
  [1]=>Array
  
  (
  
  [Book]=>Array
  
  (
  
  [title]=>Hownottowriteatechnicalbook!
  
  [请注意,find()方法的$type参数分别被设置成first和all时,返回的结果会有所区别。当它被设置成first时,返回的数组是一个关联数组,其中包含有书的信息。当类型参数被设置成all时,返回的是一个关联数组的数组,每个关联数组内包含有一本书的相关信息
  
  ]
  
  在上面这些例子中,我们学习了find()方法中使用的一些非常简单的条件限制。在实际的应用程序中,查询所用的条件要复杂的多,可能会带有许多嵌套条件以及各种类型的逻辑和条件运算符。我们接下来将会关注$constraints参数中的condition键,并学习如何使用find()来完成一些复杂的事情。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17613-1.html
网站维护教程更新时间:2012-09-21 05:22:14  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer