drupal 用法小结,drupal select ,query ,distinct
https://api.drupal.org/api/drupal/includes%21actions.inc/function/actions_do/7.x
addFileds :
这个更全点:
https://www.drupal.org/docs/7/api/database-api/database-api-overview
这个distinct:
https://www.drupal.org/node/706264
//
SELECT COUNT(*) FROM (SELECT DISTINCT first_field, second_field, third_field FROM the_table) AS distinct_three
to work more generally. using DBTNG in Drupal this would look like db_select($table)
->fields($table, array('field1', 'field2'))
->distinct()
->countQuery();
//db_count 方法:
https://www.drupal.org/node/1848376
Count queries
Count queries
Any query may have a corresponding "count query". The count query returns the number of rows in the original query. To obtain a count query, use the countQuery() method.
$count_query = $query->countQuery();
$count_query is now a new Dynamic Select query with no ordering restrictions that when executed will return a result set with only one value, the number of records that would be matched by the original query. Because PHP supports chaining methods on returned objects, the following idiom is a common approach: $num_rows = $query->countQuery()->execute()->fetchField(); //输出数量 $detail_r = $detailresult->fetchAssoc();
$detailresult->rowCount()
db_select 方法:
https://api.drupal.org/api/drupal/includes%21database%21database.inc/group/database/7.x
https://api.drupal.org/api/drupal/includes%21database%21database.inc/7.x
https://api.drupal.org/api/drupal/includes%21database%21select.inc/class/SelectQueryExtender/7.x
简单截图:
// db_select :subQuery :
if you need joining a
if you need joining a subquery use this:
// Create a subquery, which is just a normal query object.
$subquery = db_select('test_task', 'tt');
$subquery->addField('tt', 'pid', 'pid');
$subquery->condition('priority', ); // Create another query that joins against the virtual table resulting
// from the subquery.
$select = db_select('test', 't');
$select->join($subquery, 'tt', 't.id=tt.pid');
$select->addField('t', 'name'); // The resulting query should be equivalent to:
// SELECT t.name
// FROM test t
// INNER JOIN (SELECT tt.pid AS pid FROM test_task tt WHERE priority=1) tt ON t.id=tt.pid
// db_query
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid AND n.type = :type', array(':uid' => $uid, ':type' => 'page'));
// Result is returned as a iterable object that returns a stdClass object on each iteration
foreach ($result as $record) {
// Perform operations on $record->title, etc. here. print($record->title . ""); // in this example the available data would be mapped to object properties:
// $record->nid, $record->title, $record->created
}
//date_format:
$sql = "SELECT (DATE_FORMAT(FROM_UNIXTIME(co.changed), '%d-%m-%Y')) AS date, ci.type AS type, co.status, COUNT(distinct(co.order_id)) AS count
FROM commerce_order co
LEFT JOIN commerce_line_item ci ON co.order_id = ci.order_id
GROUP BY date, co.status, ci.type
ORDER BY date";
$result = db_query($sql);
foreach ($result as $row) {
print_r($row);
}
//Left Join SubQuery
Query I am executing with db_select: $query = db_select('node_view_count', 'n');
$query->join('users', 'u', 'n.uid = u.uid'); //JOIN node with users $query->groupBy('n.nid');//GROUP BY user ID
$query->groupBy('u.name');//GROUP BY user ID $query->fields('n',array('nid'))//SELECT the fields from node_view_count
->fields('u',array('name'))//SELECT the fields from user
->condition('n.uid','','<>')
->orderBy('timestamp', 'DESC');//ORDER BY created
2\
$connection = Database::getConnection();
$sth = $connection->select('file_managed', 'fm');
$sth->addField('fm', 'filemime');
$sth->addExpression('COUNT(fm.filemime)', 'count');
$sth->groupBy('fm.filemime');
// Execute the statement
$data = $sth->execute();
// Get all the results
$results = $data->fetchAll(\PDO::FETCH_ASSOC);
//结果集处理:
db_like($prefix);
https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_like/7.x
$search_string ="per";
$result = db_query('SELECT title
FROM {node} n
WHERE n.title like :title'
,array(':title' => "%".$search_string."%"))
->fetchAll();
print_r($result); $result = db_select('person', 'p')
->fields('p')
->condition('name', db_like($prefix) . '%', 'LIKE')
->execute()
->fetchAll();
$sql = 'SELECT sid, score FROM {search_index} WHERE word LIKE :term';
$result = db_query($sql, array(':term' => '%' . db_like($search_term)));
//结果集处理:
<?php
// Using the same query from above...
$uid = ;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid', array(':uid' => $uid)); // Fetch next row as a stdClass object.
$record = $result->fetchObject(); // Fetch next row as an associative array.
$record = $result->fetchAssoc(); // Fetch data from specific column from next row
// Defaults to first column if not specified as argument
$data = $result->fetchColumn(); // Grabs the title from the next row // Retrieve all records into an indexed array of stdClass objects.
$result->fetchAll(); // Retrieve all records as stdObjects into an associative array
// keyed by the field in the result specified.
// (in this example, the title of the node)
$result->fetchAllAssoc('title'); // Retrieve a 2-column result set as an associative array of field 1 => field 2.
$result->fetchAllKeyed();
// Also good to note that you can specify which two fields to use
// by specifying the column numbers for each field
$result->fetchAllKeyed(,); // would be nid => created
$result->fetchAllKeyed(,); // would be title => nid // Retrieve a 1-column result set as one single array.
$result->fetchCol();
// Column number can be specified otherwise defaults to first column
$result->fetchCol($db_column_number); // Count the number of rows
$result->rowCount();
//count just one
$dev_query = "select id from aa where ont > UNIX_TIMESTAMP() - 60 group by id";
$id = db_query($dev_query)->fetchField(); //print only one id string
$a = ; ?>
//DB_insert
https://www.drupal.org/node/310079 https://dev.mysql.com/doc/refman/5.7/en/insert-select.html //db insert 语法
//多条数据的插入
$values = array(
array(
'title' => 'Example',
'uid' => ,
'created' => REQUEST_TIME,
),
array(
'title' => 'Example 2',
'uid' => ,
'created' => REQUEST_TIME,
),
array(
'title' => 'Example 3',
'uid' => ,
'created' => REQUEST_TIME,
),
);
$query = db_insert('node')->fields(array('title', 'uid', 'created'));
foreach ($values as $record) {
$query->values($record);
}
$query->execute();
//基于select的插入:
<?php
// Build the SELECT query.
$query = db_select('node', 'n');
// Join to the users table.
$query->join('users', 'u', 'n.uid = u.uid');
// Add the fields we want.
$query->addField('n','nid');
$query->addField('u','name');
// Add a condition to only get page nodes.
$query->condition('type', 'page'); // Perform the insert.
db_insert('mytable')
->from($query)
->execute();
?>
db_insert 模拟 insert ignore 参数:
https://drupal.stackexchange.com/questions/89253/how-to-set-insert-ignore-in-db-insert-without-db-merge (
How to set 'INSERT IGNORE' in db_insert without db_merge
貌似不可实现)
解决方案:
(1)
try {
$insertID = db_insert('crawl_data')->fields(array(
'url' => $url,
))->execute();
} catch (Exception $ex) {
//这样就不会执行插入,并且不报错...
}
(2):先查一下,再入库
其他:
db_merge('people')
->key(array('job' => 'Speaker'))
->insertFields(array('age' => ,'name' => 'Meredith'))
->updateFields(array('name' => 'Tiffany'))
->execute();
//如果存在job为Speaker的一条记录,则更新name为Tiffany,如果不存在,就插入一条age为31,name为Meredith,job为Speaker的记录。
6.对数据库某字段值自动加一或者自增。
复制代码 代码如下:
db_update('example_table')
->expression('count', 'count + 1')
->condition('field1', $some_value)
->expression('field2', 'field2 + :inc', array(':inc' => ))
->execute();
//通过子sql查询插入
<?php
// Build the SELECT query.
$query = db_select('node', 'n');
// Join to the users table.
$query->join('users', 'u', 'n.uid = u.uid');
// Add the fields we want.
$query->addField('n','nid');
$query->addField('u','name');
// Add a condition to only get page nodes.
$query->condition('type', 'page'); // Perform the insert.
db_insert('mytable')
->from($query)
->execute();
?>
https://api.drupal.org/api/drupal/includes%21database%21database.inc/7.x
//DB_AND || DB_OR
$and = db_and()->condition('mid', )->condition('cache_type', 'year');
$and = db_or()->condition('mid', )->condition('cache_type', 'year');
$query->condition($or);
//切换数据库
// set external database.
db_set_active('panel');
// Start select query.
$query = db_select('gw_route', 'g');
$query->fields('g', array('country', 'cost')); // Create expression (acts the same as any db value at sql) and use it.
$query->addExpression('MIN(g.cost)', 'min_cost'); $query->condition('g.country', '','!=');
$query->groupBy('g.country');
$query->orderBy('g.country', 'ASC');
$result = $query->execute();
// Set active default database.
db_set_active();
while($record = $result->fetchAssoc()) {
print_r($record);
}
//LEFT_JOIN 子查询 sub_query
原理(code):
public function leftJoin($table, $alias = NULL, $condition = NULL, $arguments = array()) {
return $this->addJoin('LEFT OUTER', $table, $alias, $condition, $arguments);
}
//add join
public function addJoin($type, $table, $alias = NULL, $condition = NULL, $arguments = array()) { if (empty($alias)) {
if ($table instanceof SelectQueryInterface) {
$alias = 'subquery';
}
else {
$alias = $table;
}
}//对table 做了是否是查询的判断 $alias_candidate = $alias;
$count = ;
while (!empty($this->tables[$alias_candidate])) {
$alias_candidate = $alias . '_' . $count++;
}
$alias = $alias_candidate; if (is_string($condition)) {
$condition = str_replace('%alias', $alias, $condition);
} $this->tables[$alias] = array(
'join type' => $type,
'table' => $table,
'alias' => $alias,
'condition' => $condition,
'arguments' => $arguments,
); return $alias;
} QQQQ:
How to set an alias to a fields on a db_select?
$query = db_select('super_long_table', 'slt');
$query->addField('slt', 'mys_super_long_field', 'mslf');
drupal 用法小结,drupal select ,query ,distinct的更多相关文章
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- Delphi中ClientDataSet的用法小结
Delphi中ClientDataSet的用法小结 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进 ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动
MVC图片上传详解 MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...
- hive中select中DISTINCT的技巧和使用
hive中select中DISTINCT的技巧和使用 单表的唯一查询用:distinct 多表的唯一查询用:group by 在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 ...
- 转载:Hadoop排序工具用法小结
本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...
- [No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...
- C++ typedef用法小结 (※不能不看※)
C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...
随机推荐
- oracle 恢复备份
select * from dbconninfo update dbconninfo set url = 'jdbc:oracle:thin:@(description=(address_list=( ...
- 在C#客户端用HTTP上传文件到Java服务器
在C#客户端用HTTP上传文件到Java服务器 来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...
- QWidget背景(透明)问题
一. 背景設定為成黑色,前景色設為白色. 方法一.paltette方式,經測試,該方法不會影響到其他控制元件,建議使用 QPalette bgpal = palette();bgpal.setColo ...
- linux $* $@ 特定位置参数
举例说:脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" "2&qu ...
- BASIC-26_蓝桥杯_报时助手
示例代码: #include <stdio.h> void print(int x) { switch(x) { : printf("zero ");break; : ...
- Python- 解决PIP下载安装速度慢 让PIP源使用国内镜像,提升下载速度和安装成功率。
原文: https://www.cnblogs.com/microman/p/6107879.html 对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间. ...
- python的eval、exec函数使用总结
eval函数 一.函数的作用 将字符串str当成有效的表达式来求值并返回计算结果.它要执行的python代码只能是单个运算表达式(不支持任意形式的赋值操作),而不能是复杂的代码逻辑. 二.函数的定义 ...
- web基础 (一) http协议
一.什么是web服务 浏览器与网页服务端发起的请求与回应(返回的是一堆字符串,浏览器去渲染生成页面!)都是 标准的CS模式 ---- bs模式:客户端用浏览器即可,服务端需要自己去写 http协议是建 ...
- DOS 批处理命令For循环命令详解
for命令是一种对一系列对象依次循环执行同一个或多个命令的在命令行或批处理中运行的命令,结合一些Windows管理中的程序后,其处理功能强大.应用灵活方便程度令人刮目相看 for命令是一种对一系列 ...
- 温故而知新-正则单词和strlen
1 正则表达式用\b表示单词的开始和结束 \bblog\b 正则查找blog这个单词 2 关于strlen的汉字问题 在utf8格式下 strlen('汉字')=6 在gbk格式下 strlen(' ...