Z-Blog Wiki Z-Blog Wiki

Z-Blog官方文库

用户工具

站点工具


zblogphp:development:features:1.5:chainquery

这是本文档旧的修订版!


链式SQL调用

现在,用全新的链式SQL来查询数据库了!1.6.1后链式查询终于完善了! 本页面的所有内容都是适合1.6.1版本的!

注意:创建一个链式SQL实例,你可以用

$sql = $zbp->db->sql->get()->select('zbp_post')->where('1=1')->sql;
然后执行这行$sql再获取结果
$array = $zbp->db->Query($sql);


SQL SELECT

第1种写法 使用select指令

//取category表所有的数据
$sql = $zbp->db->sql->get()->select('zbp_category')->sql;
$array = $zbp->GetListType('Category', $sql);
//遍历数据输出等
foreach ($array as $a) {
    ...
}
$sql生成数据
SELECT * FROM zbp_category

第2种写法 使用selectany和from指令组合

//取category表的ID字段数组
$sql = $zbp->db->sql->get()->selectany('cate_ID')->from('zbp_category')->sql;
$array = $zbp->db->query($sql);
$sql生成数据
SELECT cate_ID FROM zbp_category


SQL WHERE 子句

取ID为1的文章

$sql = $zbp->db->sql->get()->select("zbp_post")
                           ->where(array('=', 'log_ID', "1"))
                           ->sql;
$articles = GetListType('Post', $sql);
$article = $articles[0];
 
#where(array('=', 'log_ID', "1")) 
#可以写成 where(array('log_ID = 1'))
#也能写成 where('log_ID = 1')
# =号操作符可以换成<>,LIKE,>=,<= 等等
$sql生成数据
SELECT * FROM  zbp_post  WHERE  log_ID = '1'

AND 运算符

用AND选择2个条件,更多的条件继续增加where

$sql = $zbp->db->sql->get()->select("zbp_post")
                           ->where(array('=', 'log_Status', "1"))
                           ->where(array('=', 'log_Type', "0"))
                           ->sql;
$articles = GetListType('Post', $sql);
SELECT * FROM zbp_post WHERE log_Status = '1' AND log_Type = '0'

OR 运算符

$sql = $zbp->db->sql->get()
                ->select("zbp_post")
                ->where(
                    array('or',
                        array(
                            array('log_ID', '1'),
                            array('log_Title', '2'),
                        ),
                    )
                )
                ->sql;
#注意,此处的条件也可以写为->where('or',array('=', 'log_ID', '1'),array('=', 'log_Title', '2'))
SELECT * FROM zbp_post WHERE ((1 = 1) AND ( log_ID = '1' OR log_Title = '2' ) )
其它的几种OR类型
#自定义操作符的,like的,可以和写where条件一样
$sql = $zbp->db->sql->get()
                ->select("zbp_post")
                ->where(
                    array('or',
                        array(
                            array('<>', 'log_ID', '1'),
                            array('LIKE', 'log_Title', '2'),
                        ),
                    )
                )
                ->sql;
SELECT * FROM zbp_post WHERE ((1 = 1) AND ( log_ID <> '1' OR log_Title LIKE '2' ) )

LIKE 操作符

一般用于搜索中,可以把search换成like,但是不会自动在两边加上%

$sql = $zbp->db->sql->get()->select("zbp_post")
                           ->where(array('search', 'log_Title', "Test"))
                           ->sql;

SELECT * FROM zbp_post WHERE ((1 = 1) AND ( (log_Title LIKE '%Test%') ) )

IN 操作符

$sql = $zbp->db->sql->get()->select("zbp_post")
                ->where(array('IN', 'log_ID', array(1, 2, 3, 4)))
                ->sql

SELECT * FROM  zbp_post  WHERE  ((1 = 1) AND (log_ID IN ( '1' ,  '2' ,  '3' ,  '4' ) ) )

BETWEEN 操作符

$sql = $zbp->db->sql->get()->select("zbp_post")
                ->where(array('between', 'log_ID', "1", "3"))
                ->sql

SELECT * FROM  zbp_post  WHERE  (log_ID BETWEEN '1' AND '3') 

EXISTS 操作符

$sql = $zbp->db->sql->get()->select("zbp_post")
                ->where(array('exists', 'SELECT 1'))
                ->sql;
SELECT * FROM  zbp_post  WHERE  EXISTS ( SELECT 1 ) 

SQL 通配符

通配符有%和_还有[charlist],[^charlist]或[!charlist]

$sql = $zbp->db->sql->get()->select("zbp_post")
                           ->where(array('like', 'log_Title', "_aidu"))
                           ->sql;

SELECT * FROM zbp_post WHERE ((1 = 1) AND ( (log_Title LIKE '_aidu') ) )


SQL JOIN连接(LEFT JOIN RIGHT JOIN,FULL JOIN)

$sql = $zbp->db->sql->get()->selectany('log_ID')
                        ->from(array('zbp_post'=>'p'))
                        ->leftjoin(array('zbp_postrelation'=>'pr'))
                        ->on('p.log_ID = pr.pr_PostID')
                        ->where('1 = 1')
                        ->sql;
 
#这里只举例了LEFTJOIN联表查询,还分别给2个表分别设了别名
SELECT  log_ID  FROM zbp_post AS p LEFT JOIN zbp_postrelation AS pr ON p.log_ID = pr.pr_PostID WHERE 1 = 1


UNION 操作符


SQL 别名


SELECT LIMIT

*
 


SELECT DISTINCT

*
 


SQL ORDER BY

*
 


SQL GROUP BY 语句


SQL HAVING 子句


USEINDEX FORCEINDEX IGNOREINDEX

本指令是mysql专用的,分别是使用索引,强制使用索引,跳过索引

$sql = $zbp->db->sql->get()->select('zbp_post')
                           ->USEINDEX('zbp_log_TPISC', 'zbp_log_VTSC')
                           ->sql;
SELECT * FROM zbp_post USE INDEX ( zbp_log_TPISC ,zbp_log_VTSC )


SQL INSERT INTO 语句

*
 


SQL UPDATE 语句

*
 


SQL DELETE 语句

*
 


CREATE 数据库,表,索引

CREATE TABLE

创建一个表,先定义数据结构:

$tableData = array(
    'a' => array('a', 'integer', '', 0, '主ID'),
    'i' => array('i', 'boolean', '', false),
    'k' => array('k', 'string', 250, ''),
    'o' => array('o', 'string', 'longtext', '', '备注为某字段'),
    'r' => array('r', 'float', '', ''),
);
$sql = $zbp->db->sql->get()->create('zbp_table')
                            ->data($tableData)
                            ->option(array('engine' => 'MyISAM'))
                            ->option(array('charset' => 'utf8'))
                            ->option(array('collate' => 'utf8_general_ci'))
                            ->sql;
$zbp->db->query($sql);
 
echo $sql;
生成的$sql值为:
CREATE TABLE IF NOT EXISTS zbp_table ( a INT(11) NOT NULL AUTO_INCREMENT COMMENT '主ID', i tinyint(1) NOT NULL DEFAULT '0', k VARCHAR(250) NOT NULL DEFAULT '', o longtext NOT NULL COMMENT '备注为某字段', r FLOAT NOT NULL DEFAULT 0, PRIMARY KEY (a) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1 ;
备注:可以指定表的引擎和字符集,如果不指定则从option文件读取系统的配置

CREATE INDEX

$sql = $zbp->db->sql->get()->CREATE('zbp_post')
                           ->index(
                                     array('zbp_post_index_stt'=>array('log_Status','log_Type','log_Tag'))
                                  )
                           ->sql;
CREATE INDEX zbp_post_index_stt ON zbp_post ( log_Status , log_Type , log_Tag )


DROP 数据库,表,索引


ALTER 修改 字段

添加字段

$sql = $zbp->db->sql->get()->ALTER("zbp_post")
->ADDCOLUMN('log_IsHide tinyint(4) NOT NULL DEFAULT \'0\'')
->ADDCOLUMN('log_CreateTime', 'int(11) NOT NULL DEFAULT \'0\'')
->ADDCOLUMN('log_Note', 'longtext', 'NOT NULL')
->sql;
#ADDCOLUMN内的参数可以写成一个,也可以写成多个

ALTER TABLE zbp_post ADD COLUMN log_IsHide tinyint(4) NOT NULL DEFAULT '0' ,ADD COLUMN log_CreateTime INT(11) NOT NULL DEFAULT '0' ,ADD COLUMN log_Note longtext NOT NULL


SQL 函数 AVG,COUNT,MIN,MAX

zblogphp/development/features/1.5/chainquery.1586263647.txt · 最后更改: 2020/04/07 20:47 由 zx.asd