Z-Blog Wiki Z-Blog Wiki

Z-Blog官方文库

用户工具

站点工具


zblogphp:development:features:1.5:chainquery

这是本文档旧的修订版!


链式SQL调用

现在,用全新的链式SQL来查询数据库了!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的
$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 JOIN连接(LEFT JOIN RIGHT JOIN,FULL JOIN)


UNION 操作符


SQL 别名


SELECT LIMIT

*
 


SELECT DISTINCT

*
 


SQL ORDER BY

*
 


SQL GROUP BY 语句


SQL HAVING 子句


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文件读取系统的配置


DROP 数据库,表,索引


ALTER 修改 字段


SQL 函数 AVG,COUNT,MIN,MAX

zblogphp/development/features/1.5/chainquery.1586259994.txt · 最后更改: 2020/04/07 19:46 由 zx.asd