柔情似水 发表于 2015-2-3 23:43:58

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()来完成一些庞杂的工作。
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。

海妖 发表于 2015-2-4 06:16:26

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

金色的骷髅 发表于 2015-2-27 12:41:32

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

老尸 发表于 2015-3-3 03:10:49

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

小魔女 发表于 2015-3-6 01:45:50

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

小女巫 发表于 2015-3-12 18:29:23

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

第二个灵魂 发表于 2015-3-20 01:23:39

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

莫相离 发表于 2015-3-25 10:05:57

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

变相怪杰 发表于 2015-3-25 11:18:48

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

谁可相欹 发表于 2015-4-26 08:11:20

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

飘灵儿 发表于 2015-4-29 14:20:47

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

仓酷云 发表于 2015-4-30 11:32:40

本文当是我的笔记啦,遇到的问题随时填充

精灵巫婆 发表于 2015-5-11 16:42:48

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

乐观 发表于 2015-5-12 10:33:37

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

因胸联盟 发表于 2015-6-20 11:15:25

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

深爱那片海 发表于 2015-6-20 20:14:50

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

活着的死人 发表于 2015-6-30 08:45:41

基础有没有对学习php没有太大区别,关键是兴趣。

冷月葬花魂 发表于 2015-7-11 18:12:56

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

爱飞 发表于 2015-7-11 18:19:48

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

再见西城 发表于 2015-7-20 19:16:13

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页: [1]
查看完整版本: PHP网站制作之有关数据检索的更多内容