db_query输出任意内容

论坛: 

db_query就是直接运行SQL

性能,原始的views的性能是大家都知道的,不是一般的差,而是很差!特别是当你的数据库到达10万条的时候(没到这数就别操心了),

很多高手都建议你就不要用views的分页功能了,这也限制了drupal在国内的发展,但事实上真是这样吗?

其实views的性能是可以改得非常好的,关键在Hook_views_data, 以后有机会的话将会介绍,另外则是drupal的cache也很灵活。

如果你真的很认真看完“db_query”这一节,你会发现,为何我还要用views呢?就目前来说,如果是不需要views帮我生成HTML的时候,我只是用views来帮我生成SQL,然后我几乎都是只用db_query了。当然,当需要定位分页时,我会毫不犹豫的使用例子六的形式(数据库大了再结合drupal cache和hook_views_data),views生成的HTML还是挺不错的,我喜欢,特别是引入的tpl.php特别灵活。

列出最常用的几个功能

[查询]

$result = db_query_range('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid
ORDER BY n.created DESC', 0, 10, array(':uid' => $uid));
foreach ($result as $record) {
print $record->title;
print $recod->nid;
}


[输出单字段]

$percent =db_query("SELECT title FROM {node}")->fetchField();


[插入]

$fields = array('nid' => 1, 'title' => 'my title', 'body' => 'my body');
db_insert('node')->fields($fields)->execute();


[删除]

$nid = 5;
$num_deleted = db_delete('node')
->condition('nid', $nid)
->execute();






—————————————————————————————-

1.如果你用过views请看这段:你如果已经了解过drupal,你会觉得这是views的工作啊,我学views好了!drupal的核心功能才是黄金,不是说views不好,学习这两个API,你才能更深入了解
views,为以后你为views提速做准备(用过views都知道views慢,但其实views可以极大的提速,关键在此两API和一个HOOK)

2.如果你没用过views:别急着安装,也许你按图文说明操作半天也不一定会用views模块,但明白这两个API后,你用views就变成半个专家了.所以我先介绍它们,后面再说views

3.忽略drupal,要做文章列表,你会想到用SQL吧,直接用PHP查询SQL就能得到文章列表了,这样用drupal有何特别的地方呢

4.drupal在这便利的地方就是用db_fetch_object来将得到的数据变为结构化,就是说你用print_r()输出的结构很容易读明

5.你不用担心SQL的问题,我也不太懂SQL的,但基本的select我看得明(用phpmyadmin能生成SQL的)

=========================================================

1.示例:我们要得到按时间倒序的node 的ID2.
如果你没有一大堆node来进行此文说的测试,那你可以安装一个强大易用的模块帮你生成一堆测试的文章数据:http://drupal.org
/project/devel,这个模块只装有”generate”字样的那个就好了,然后http://youdrupalsite.com
/admin/generate/content进这里批量生成数据先吧.这个模块以后也有大用,但不需要现在了解,

3.我这里直接给出SQL,看得明就好,如果你没接触过SQL,那就COPY吧,后面的drupal anywhere我会介绍怎么方便生成drupal的SQL的(views),不用急着把自己吃成胖子啊.慢慢来

$nodesql=”  SELECT node.nid AS nid,   node.changed AS node_changed FROM drup_node node     ORDER BY node_changed DESC  ”;

4.开始drupal代码,新建文件dbquery.php,

//省略了drupal anywhere 7时介绍过chdir上提到的drupal固定的开场语句

$nodesql=”  SELECT node.nid AS nid,   node.changed AS node_changed FROM drup_node node     ORDER BY node_changed DESC  ”;

$noderesult=db_query_range($nodesql,10,100);//查询符合上述SQL的100条数据,从第10条开始,数字你随便改吧

while($rows = db_fetch_object($noderesult)){

print_r($rows);

}

$noderesult=NULL;//习惯及时清空不用的对象

//php结束

看看上面输出什么结果吧,

自己试试改改SQL,试着输出全部用户,成功的话,这个API就有小成了

 $event_registration = db_query('SELECT COUNT(  `entity_id` )  count
                                 FROM  `registration` 
                                 WHERE  `entity_id` = :nid', array(':nid' => $value->nid)
                                 )->fetchAll();
其中db_query()其半部分是sql命令,:nid 为参数
dashan 答复于