Skip navigation.

极湖

无不用其“极”

Posts tagged with "SQL"

SQL 关键字 → Zend_Db_Select 函数

,

今天用 Zend_Db 碰上 having 关键字,一开始写在 group() 中,没成功,后来发现有 having() 方法,问题解决了。

顺便总结一下 SQL 关键字与 Zend_Db_Select 函数的对应关系:
FROM → from()
DISTINCT → distinct()
JOIN → join()
LEFT OUTER JOIN → joinLeft()
RIGHT OUTER JOIN → joinRight()
FULL OUTER JOIN → joinFULL()
WHERE → where()、orWhere()
GROUP BY → group()
HAVING → having()
ORDER BY → order()

获取 PostgreSQL 数据库之 sequence 名称列表的 SQL

, , ,

较低版本(1.0 ?) CakePHP 的文件
cake/libs/model/dbo/dbo_postgres.php
中,有一句 SQL:

SELECT sequence_name FROM information_schema.sequences

在 PostgreSQL 8 中,以上 SQL 运行出错。

根据原意修改如下:

SELECT c.relname as sequence_name FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relkind='S' and n.nspname = 'public'

其中的 'public' 是 schema 名,需要根据实际情况修改。

顺便把 dbo_postgres.php 中包含以上 SQL 的函数修改如下:
    function sequenceExists($seq) {
        $cache = parent::__cacheDescription('sequences');
        if($cache != null) {
            return in_array($seq, $cache);
        }
        $sequences = array();
        // ★修改这句
        //$res = $this->rawQuery("SELECT sequence_name FROM information_schema.sequences");
        $schema = $this->config['schema'];
        $res = $this->rawQuery("SELECT c.relname as sequence_name FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relkind='S' AND n.nspname = '{$schema}'");
        while($row = $this->fetchRow($res)) {
            $sequences[] = $row[0]['sequence_name'];
        }
        
        parent::__cacheDescription('sequences', $sequences);
        return in_array($seq, $sequences);
    }

需要说明的是,在新版本的 CakePHP 中,已见不到以上函数。

PostgreSQL: 避免重复插入的SQL语句

, ,

避免重复数据,可以给表格建索引,做主键,或者建表的时候给其附加制约。

有了制约条件的表格,插入重复数据的时候,自然会报错而插入失败,有的时候,还想避免报错,这时候,下面的SQL语句就有用了:
INSERT INTO table (a, b)
    SELECT '1' AS a, '2' AS b 
    FROM table 
    WHERE NOT EXISTS (
        SELECT 1 FROM table WHERE a='1' AND b='2'
    )

MySQL 全文检索

,

今天才知道MySQL有这么一个的语句:

MATCH (...) AGAINST (... [IN BOOLEAN MODE])

可以比较方便地实现全文检索。可惜目前不支持对中文日文等多字节编码语言的检索,中文检索的情况下,不得不用 LIKE 语句。

参考:
MySQL 全文搜索
http://www.phpe.net/mysql_manual/06-8.html
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31