PHP网站制作之有关数据检索的更多内容
可以在书上很方便地做标记,及时记下自己的心得体会。 </p> 有关数据检索的更多内容咱们已晓得利用模子内置办法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%'
ORDER BY `Book`.`isbn` DESC
LIMIT 2;
在CakePHP中,咱们可以经由过程像上面如许利用find()办法来失掉一样的了局。
find(
'all',
array(
'conditions' => array('Book.title' => 'LIKE A%'),
'fields' => array(
'Book.isbn',
'Book.title',
'Book.author_name'
),
'order' => 'Book.isbn DESC',
'limit'=>2
)
);
[ 在前提(condition)中,为字段添加上模子称号前缀(像写成Book.title而非title)是一个很好的习气。当咱们需求调取相干模子中的数据而且了局中有不异的字段称号时,这个习气就特别主要。别的它也改良了代码的清爽度
] find()办法承受两个参数:$type(类型)和$constraints(束缚)。$type(类型)是一个用来界说查询“类型”的字符串。$type可以设成上面这三品种型中的一个
[*]all:find办法会依照给定的排序体例和个数限制前往一切合适前提的纪录。
[*]first:这个办法只前往合适束缚前提的首笔记录
[*]count:会前往查询了局中所包括纪录的总数目。
正如咱们从上一个例子中所看到那样,咱们可以以联系关系数组(associative array)的模式在第二个参数 $constraints中指定其他查询束缚。$constraints参数的联系关系数组可以有以下键(key)
[*]conditions(前提):前提(conditions)可使用于代替查询语句中的WHERE子句。默许值是1=1,这暗示没前提束缚。
[*]fields(字段):查询了局应当前往的字段局限。假如没有指明,它会前往一切字段。当find()函数的第一个参数$type被设置成count时,该参数不成用。
[*]order(排序):这个字符串界说了查询语句中ORDER BY子句的内容。假如order排序没有指明,那末SQL查询中将不会添加有ORDER BY子句。查询类型是count是,该参数也不成用。
[*]limit(限制):该整数指了然前往纪录的最大数目。假如没指定limit,那末函数会前往一切合适前提的纪录。只要当查询类型是all时,它才可用。
[*]offset(偏移值):这个参数界说了首个前往纪录的偏移值。默许值是0.只要当type参数是all时,该设置才无效。
为了便于读者更清晰地懂得这个概念,咱们将会疾速阅读上面这些标明了find()用法的例子:
1,假如你想晓得书名以字母“A”开首的书的数量,咱们会在BooksController(Books掌握器中)添加以下代码:
$count = $this->Book->find('count', array('conditions' =>
array('Book.title' => 'LIKE A%'));
It executes the following SQL query:
它会履行以下SQL查询
SELECT COUNT(*) 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.id DESC'
)
);
该代码会履行以下SQL语句
SELECT `Book`.`isbn`, `Book`.`title` FROM `books` AS `Book`
WHERE 1 = 1 ORDER BY `Book`.`created` DESC LIMIT 1;
贮存在$book变量中的了局会是上面这个模样:
Array
(
=> Array
(
=> 1847192971
=> Building Powerful and Robust Websites
with Drupal 6
)
)
3,假如你想找出某个作者所写的所得书并依照书名来排序,那末上面这个代码可以到达此目标:
$books = $this->Book->find('all',
array(
'fields' => array('title'),
'conditions' => array(
'Book.author_name' => 'LIKE David Barnes'
),
'order' => 'Book.title ASC'
)
);
下面这段代码将会履行上面这个SQL查询
SELECT `Book`.`title` FROM `books` AS `Book` WHERE `Book`.`author_
name` LIKE 'David Barnes' ORDER BY
`Book`.`title` ASC
下面这段查询会前往以下的了局:
Array
(
=> Array
(
=> Array
(
=> How to write computer books
)
)
=> Array
(
=> Array
(
=> How not to write a technical book!
[ 请注重,find()办法的$type参数分离被设置成 first和all时,前往的了局会有所区分。当它被设置成first时,前往的数组是一个联系关系数组,个中包括有书的信息。当类型参数被设置成all时, 前往的是一个联系关系数组的数组,每一个联系关系数组内包括有一本书的相干信息
] 在下面这些例子中,咱们进修了find()办法中利用的一些十分复杂的前提限制。在实践的使用法式中,查询所用的前提要庞杂的多,能够会带有很多嵌套前提和各类类型的逻辑和前提运算符。咱们接上去将会存眷$constraints参数中的condition键,并进修若何利用find()来完成一些庞杂的工作。
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 本文当是我的笔记啦,遇到的问题随时填充 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 基础有没有对学习php没有太大区别,关键是兴趣。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页:
[1]