dashan 提交于
查询:
db_query('SELECT * FROM {joke} WHERE vid = :vid', array(':vid' => $node->vid));
-------
插入:
$nid = db_insert('joke')
->fields(array(
'nid' => '4',
'vid' => 1,
'punchline' => 'And the pig said oink!',
))
->execute();
--------
更新:
$num_updated = db_update('joke')
->fields(array(
'punchline' => 'Take my wife please!',
))
->condition('nid', 3, '>=')
->execute();
// 如果我想知道有多少条记录被更新了,可以通过 $num_updated 获得。
--------
删除:
$num_deleted = db_delete('joke')
->condition('punchline', 'Take my wife please!')
->execute();
——————————————————————————————
Drupal 7 中从数据库中获取值:
——————————————————————————————
获取单行:
// 获取 joke 表的总记录条数
$nbr_records = db_query("SELECT count(nid) FROM {joke}")->fetchField();
--------
获取多行:
// 获取 node 表中类型=page && 状态=1 的所有记录的标题
$type = 'page';
$status = 1;
$result = db_query("SELECT nid, title FROM {node} WHERE type = :type AND status = :status",
array(
':type' => $type, ':status' => 1,
));
foreach ($result as $row) {
echo $row->title."<br/>";
}
——————————————————————————————
使用查询生成器和查询对象构造复杂的查询:
——————————————————————————————
$result = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => 2));
使用查询生成器和查询对象来改造上面语句,实现相同的功能:
// ->range 可以用来限制显示的条数。
// 用法:->range(0, 100);
$query = db_select('role', 'r'); // 选择 role 表,并给一个别名 'r'
$query // 显示 rid=2 的 name 字段
->condition('rid', 2)
->fields('r', array('name'));
$result = $query->excute(); // 执行语句,将结果存入数组 $result
foreach($result as $row) { // 循环打印出结果
echo $row->name."<br/>";
}
——————————————————————————————
分页
——————————————————————————————
$query = db_select('node', 'n')->extend('PagerDefault'); // 选择表 并使用分页
$query // 显示类型为page的title字段
->condition('type', 'page')
->fields('n', array('title'))
->limit(10); // 每页显示10条
$output = '';
foreach ($result as $row) {
$output .= $row->title."<br/>";
}
$output .= theme('pager'); // 设置分页样式
print $output; // 输出
——————————————————————————————
end
Drupal 7 db_select 联合表查询
Drupal 7 发生了很大的改变,包括数据结构和一下api,总之感觉上更加强大,开发更加方便,提供了更多扩展性很强的api使用。drupal 7 数据层比较drupal 6 而已发生了很大的改变。drupal 7 多表查询使用实例:
<?php
/**
* 只要读取一个词汇表里面的没有父类的ID,也就是最高级别的分类
*/
function ditusearch_top_parent_id($vid) {
$query = db_select('taxonomy_term_hierarchy','h'); //选择表
$query->join('taxonomy_term_data','d','h.tid = d.tid'); // 联合查询
$query->addField('d', 'tid'); // 添加字段
$query->condition('h.parent',0); // 添加条件where
$query->condition('d.vid',$vid); // 再添加一个条件 and ....
$query->addTag('ditusearch_generate_path'); // 添加Tag
可选项,这个就是方便其他地方可以改变这个查询$query 比如如果添加了tag 可以使用 hook_query_alter 对其进行查询
如果你使用过views开发,views 也可以了类似的hook
$tid = $query->execute()->fetchCol();
return $tid; //返回一个数组
}
/**
* hook_query_alter使用, 对上面的 $query 改变
*/
function ditusearch_query_alter(QueryAlterableInterface $query) {
if($query->hasTag('ditusearch_generate_path')) {
$query->addField('d','vid'); // 通过下图可以感到对查询进行了改变
}
}
?>
- 登录以发表评论