Drupal 7 db_select 联合表查询实例代码

论坛: 

Drupal 7 发生了很大的改变,包括数据结构和一下api,总之感觉上更加强大,开发更加方便,提供了更多扩展性很强的api使用。drupal 7 数据层比较drupal 6 而已发生了很大的改变。drupal 7 多表查询使用实例:

<?php

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; //返回一个数组 
}

function ditusearch_query_alter(QueryAlterableInterface $query) {
    if($query->hasTag('ditusearch_generate_path')) {
        $query->addField('d','vid'); // 通过下图可以感到对查询进行了改变
    }
}
?>


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


dashan 答复于

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


dashan 答复于

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


dashan 答复于

<?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; 
    ?>


dashan 答复于

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


limei 答复于

<?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'); // 添加字段2 
    $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'); // 通过下图可以感到对查询进行了改变
    }
}

?>


dashan 答复于