Drupal 7 数据库API增加了db_select()方法,和db_query()相比,语法更加清晰,使用也更加方便。目的也不言而喻,就是取代db_query()。下面我也就列罗出一些经常使用的技巧,可能不够全面,还请大家多多补充。

1. 单表查询(最基本使用方法)

<?php
$result = db_select('contact', 'c')  //选择表contact,名一个别名c
->fields('c') //查询c表中的字段,后面不跟参数就是查询所有
->execute()  //执行操作
->fetchAssoc(); //处理结果集
?>

2. 条件查询(condition)

<?php
    $result = db_select('node', 'n')
    ->fields('n')
    ->condition('nid', 5,'=')  //nid等于5的条件
    ->condition('status', 0,'>') // 状态大于0,也就是为真等于1
    ->condition('uid', array(1,5,7),'IN') //使用IN操作,当然还可以使用 NOT IN
    ->execute()
    ->fetchAssoc();
?>

3. 联合查询(Join)

<?php
$query = db_select('field_data_field_slide','f'); //主表

$query->join('node', 'n', 'fa.entity_id = n.nid'); // 联合node表,条件是nid

$query->condition('f.field_slide_channel_tid',$chanid,'=');

$query->condition('n.status','1','=');  //发布状态

$query->fields('n',array('nid'));  //查询nid

$query->orderBy('n.nid','DESC'); //排序条件

$query->range(0,4); //取得4条数据

$result = $query->execute();
   ?>

4.添加字段(addField)

<?php
    $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();
    ?>

5.分页使用(pager)

<?php
  $query = db_select('node', 'n')
      ->condition('type', 'article')
      ->fields('n');
  $query = $query->extend('PagerDefault')->limit(2); //limit条件是分页数目
  $result = $query->execute();
  foreach($result as $res){
     $output .= $res->title;
   }
    $output .= theme(‘pager’); //添加分页theme
    Return $output; 
    ?>

6.多表联合分页

<?php
  $query = db_select('field_data_field_news','fa')->extend('PagerDefault'); //多表联合查询extend条件必须放在db_select之后

$query->join('node','n','fa.entity_id = n.nid');

$query->join('field_data_field_news_date_sort', 'fb', 'fa.entity_id = fb.entity_id');

$query->fields('n', array('nid','title'));

$query->condition('fa.field_news_classify_tid',$tids,'in');

$query->condition('n.type','news','=');

$query->condition('n.status','1','=');

$query->orderBy('fb.field_news_date_sort_value','DESC');

$query->limit(14);

$result = $query->execute();
   ?>


function _module_name_autocomplete($string) {
  $matches = array();
  
  // Some fantasy DB table which holds cities
  $query = db_select('cities', 'c');
  // Select rows that match the string
  $return = $query
    ->fields('c', array('city'))
    ->condition('c.city', '%' . db_like($string) . '%', 'LIKE')
    ->range(0, 10)
    ->execute();
  
  // add matches to $matches  
  foreach ($return as $row) {
    $matches[$row->city] = check_plain($row->city);
  }
  
  // return for JS
  drupal_json_output($matches); //--json格式返回
}




Drupal 7 中文教程 省市县三级联动 实例代码

By g089h515r806 on 30 7月 2011

<?php
/**
 * @file
 * 省市县三级联动实例代码,
 */

/**
 * 实现钩子hook_menu().
 */
function shengshixian_menu() {
  $items['ssx'] = array(
  'title' => '省市县',
    'page callback' => 'shengshixian_test_page',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

return $items;
}

/**
 * 路径“ssx”页面的回调函数
 */
function shengshixian_test_page(){
 $render_array = array();
 //我们为这个页面设置标题
 drupal_set_title('省市县三级联动');
 //页面的正文为一个表单,注意drupal_get_form返回的不是html,需要使用drupal_render呈现一下。
 $render_array['#markup'] .= drupal_render(drupal_get_form('shengshixian_test_form'));
 //Drupal7的页面回调,返回的应该是一个数组,只有在退化形式下,才返回字符串。
 return $render_array;
}

/**
 * 表单shengshixian_test_form的构建函数
 */
function shengshixian_test_form($form, &$form_state){
  //设置省市县对应元素的默认值
  $default_sheng = !empty($form_state['values']['sheng']) ? $form_state['values']['sheng'] : '';
 $default_shi = !empty($form_state['values']['shi']) ? $form_state['values']['shi'] : '';
 $default_xian = !empty($form_state['values']['xian']) ? $form_state['values']['xian'] : '';
 
 //构建省份的选项数组,首先设置了一个提示语
  $sheng_options = array(
   '' => '请选择省份',
 );
 
 //向数据库中查询省份信息,
 $query_sheng = db_select('taxonomy_term_data','ttd')
 ->fields('ttd', array('tid', 'name'));
 
 //因为省份是第一级术语,分类术语的父亲为0
 $query_sheng->leftJoin('taxonomy_term_hierarchy', 'tth', 'ttd.tid = tth.tid ');
 $query_sheng->condition('tth.parent', 0);
 
 //需要确定术语所在的词汇表,就是我们在前面创建的地区
 $query_sheng->leftJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid ');
 $query_sheng->condition('tv.machine_name', 'diqu');
 
 //按照tid排序,并执行
 $result_sheng = $query_sheng->orderBy('tid')->execute();
 
 //将返回的结果,进行迭代,为$sheng_options赋值。
 foreach ($result_sheng as $record) {
   $sheng_options[$record->tid] = $record->name;
 }
 //省份表单元素
 $form['sheng'] = array(   
   '#title' => t('请选择您所在的省份?'),   
   '#type' => 'select',   
   '#options' => $sheng_options,   
   '#default_value' => $default_sheng,
    //#ajax属性数组  
   '#ajax' => array(     
     'callback' => 'shengshixian_sheng_callback',     
     'wrapper' => 'shi-wrapper-div',     
     'method' => 'replace',     
     'effect' => 'fade',   
   ), 
 );
 
 //构建市的选项数组,首先设置了一个提示语
 $shi_options = array(
   '' => '请选择市',
 );
 //在省份不为空的情况下,取该省份下的所有的市
 if(!empty($default_sheng)){
 
   //向数据库中查询术语信息,
  $query_shi = db_select('taxonomy_term_data','ttd')
  ->fields('ttd', array('tid', 'name'));
  //将其父术语限定在前面的省份的具体值上
  $query_shi->leftJoin('taxonomy_term_hierarchy', 'tth', 'ttd.tid = tth.tid ');
  $query_shi->condition('tth.parent', $default_sheng);
  //由于省份信息里面,已经包含了词汇表信息,所以我们不再需要关联这个taxonomy_vocabulary表。
  //$query_sheng->leftJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid AND tv.machine_name = :machine_name', array(':machine_name' => 'diqu'));
  
  //按照tid排序,并执行
  $result_shi = $query_shi->orderBy('tid')->execute();
  
  //将返回的结果,进行迭代,为$shi_options赋值。
  foreach ($result_shi as $record) {
   $shi_options[$record->tid] = $record->name;
  }

}
 /*
 //测试代码,中间测试的时候用的,这里保留了,开发模块所用到的测试代码很多,多数都已删除。
  $form['test'] = array( 
   '#markup' => '123456:'.$default_sheng
 );
 */
 //表单元素市
 $form['shi'] = array(   
   '#title' => t('请选择您所在的市?'),   
  '#prefix' => '<div id="shi-wrapper-div">',   
  '#suffix' => '</div>',
   '#type' => 'select',   
   '#options' => $shi_options,   
   '#default_value' => $default_shi,
    '#ajax' => array(     
     'callback' => 'shengshixian_shi_callback',     
     'wrapper' => 'xian-wrapper-div',     
     'method' => 'replace',     
     'effect' => 'fade',   
   ),     
 );
 
 //构建县的选项数组,首先设置了一个提示语
 $xian_options = array(
   '' => '请选择县',
 );
 //在市不为空的情况下,取该市下的所有的县
 if(!empty($form_state['values']['shi'])){
 
   //向数据库中查询术语信息,
  $query_xian = db_select('taxonomy_term_data','ttd')
  ->fields('ttd', array('tid', 'name'));
  
  //将其父术语限定在前面的市的具体值上
  $query_xian->leftJoin('taxonomy_term_hierarchy', 'tth', 'ttd.tid = tth.tid AND tth.parent = :parent', array(':parent' => $form_state['values']['shi']));
  $query_xian->condition('tth.parent', $default_shi);
  
  //由于最前面省份信息里面,已经包含了词汇表信息,所以我们不再需要关联这个taxonomy_vocabulary表。
  //$query_sheng->leftJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid AND tv.machine_name = :machine_name', array(':machine_name' => 'diqu'));
  
  //按照tid排序,并执行
  $result_xian = $query_xian->orderBy('tid')->execute();
  
  //将返回的结果,进行迭代,为$xian_options赋值。
  foreach ($result_xian as $record) {
   $xian_options[$record->tid] = $record->name;
  }
 }
 
 //表单元素县
 $form['xian'] = array(   
   '#title' => t('请选择您所在的县/区?'),   
  '#prefix' => '<div id="xian-wrapper-div">',   
  '#suffix' => '</div>',
   '#type' => 'select',   
   '#options' => $xian_options,   
   '#default_value' => $default_xian,
   
 );
 
  //提交按钮
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('提交'),
  );
  return $form;
}

/**
 * 表单元素sheng,它的值变更时,对应的Ajax回调函数。
 */
function shengshixian_sheng_callback($form,&$form_state){
  //根据当前省份,重新确定市的可选项。返回重新构建的表单元素shi
 return $form['shi'];
}

/**
 * 表单元素sheng,它的值变更时,对应的Ajax回调函数。
 */
function shengshixian_shi_callback($form,&$form_state){
  //根据当前所选的市,重新确定县的可选项。返回重新构建的表单元素xian
 return $form['xian'];
}

drupal 中基本的数据库操作相关推荐

  1. 查询linux安装了什么数据库,Linux系统中安装MySQL数据库操作手册

    Linux系统中MySQL数据库安装手册 一.安装概述: 在Linux操作系统中安装MySQL数据库是一个我们必须要掌握的一门技术,也决定了你以后找工作的薪资待遇,所以你知道它的厉害了吧!学会安装只是 ...

  2. ADO.NET中SqlCommand对数据库操作

    我们要不断地进行数据库的读写,那么ExecuteNonQuery(),ExecuteReader()与ExecuteScalar()就是我们在对数据库进行操作时要用到的,下面我来依次认识一下:     ...

  3. wdcp查看mysql日志_查看修改服务器中的WDCP数据库操作记录

    今天一老客户要使用本地工具(Navicat)操作主机中的MySQL,主机已开放3306端口,IDC后台安全策略也增加了3306,但是还是拒绝连接,出现上面的提示信息.百度了一下,说是主机名要使用&qu ...

  4. Linux系统中安装Oracle 数据库操作

    我的centos7是在virtualbox下安装的,安装Oracle安装了好久好久,现将详细操作步骤写下来. 一.安装的硬件要求 1.内存: 要求:内存最小1G,推荐2G或者更高.呃呃呃 查看命令:# ...

  5. MATLAB中简单的数据库操作

    Matlab通过JDBC建立到Oracle数据库的连接 Linux下的配置过程和Windows一样,如下: 1.将Oracle JDBC的JAR包拷贝到Matlab的相关目录(..\matlab\ja ...

  6. LINQ学习之旅——第二站LTQ之标准数据库操作(增查删改)

    今天要讲解主要内容是关于LINQ TO SQL中的标准数据库操作:插入(Insert).查询(Select).更新(Update)以及删除(Delete),凡是涉及到数据库方面的都会使用这些操作.而这 ...

  7. 数据库操作 -- C#, MYSQL,动软

    C#中的MYSQL数据库操作 本文介绍基于动软代码自动生成工具的MYSQL数据表操作. 1. 动软代码生成器安装 从动软官网下载安装文件:动软代码生成器.rar 下载后解压,找到安装文件Codemat ...

  8. PHP学习笔记——在phalapi框架内的orm数据库操作

    今天将自己的聚合支付接口集成到了phal框架内,由于在phalapi框架内如何返回视图不知道,因此需要将原本的wap站点的sdk包转化为api资源.具体过程稍晚点记录,现在将phalapi框架内的数据 ...

  9. .ne中的控制器循环出来的数据如何显示在视图上_Web程序设计-ASP.NET MVC4数据库操作实例...

    ASP.NET MVC4数据库操作实例 之前文章介绍了MVC4与Pure框架结合进行的网页设计过程中如何定义控制器.方法.模型.视图等.并使用实例进行了简单说明.本文将在此基础上进一步说明如何使用MV ...

最新文章

  1. Javascript+xmlhttp调用Webservice
  2. mysql 读写分离中间层
  3. 企业搜索引擎开发之连接器connector(二十九)
  4. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization
  5. 九、WebService中文件传输
  6. PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
  7. 中蜂几月份自然分蜂_蜜蜂的种类:北黑蜂,中华蜜蜂,皖南中蜂,贵州纳雍中蜂等等...
  8. 总线与微命令实验总结_【干货】总线制?分线制?分不清楚看看这篇文章就知道了...
  9. Spring Boot的Properties和YAML配置文件详解:
  10. 创业阶段如何找客户_如何找创业合伙人
  11. 可曾听闻【大话】二字
  12. 云桌面优缺点_云桌面中VDI架构有什么优势和劣势?
  13. layui 主动验证表单规则
  14. OpenCV计算图像像素最大值、最小值
  15. 挑战微信,主打细分人群社交的超信有机会吗?
  16. 海信网络科技软件研发实习面试
  17. 分子模拟-学习笔记(二)
  18. 微信转盘抽奖前端源码(一):8个奖品,指针开始时指向缝隙
  19. 海外直连100M跟国内5m服务器,云都网络推出美国高防服务器直连回国带宽100M独享CN2 GIA...
  20. ROS与各种IDE集成开发方法

热门文章

  1. 基于STM32C8T6语音数字的播报小算法
  2. NodeJs - for循环的几种遍历方式
  3. [转]清华大学计算机考研经验谈
  4. 如何训练GAN?训练GAN的技巧和方法
  5. Android下载地址
  6. 分享一个MongoDB可视化工具rockmongo-on-windows
  7. 利用JavaScript生成点名册
  8. 计算机与生物科学结合的论文,生物信息学论文范文
  9. 时间进度管理-甘特图
  10. 块储存、对象存储、文件存储的区别和联系