+ -
当前位置:首页 → 问答吧 → 哥的SQL 语句生成函数短的过分

哥的SQL 语句生成函数短的过分

时间:2011-07-14

来源:互联网

/**
* 生成sql语句,如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
* @param $data 条件数组或者字符串
* @param $front 连接符
* @param $in_column 字段名称
* @return string
*/
function to_sqls($data, $front = ' AND ', $in_column = false) {
    if($in_column && is_array($data)) {
        $ids = '\''.implode('\',\'', $data).'\'';
        $sql = "$in_column IN ($ids)";
        return $sql;
    } else {
        if ($front == '') $front = ' AND ';
        if(is_array($data) && count($data) > 0) {
            $sql = '';
            foreach ($data as $key => $val) {
                if(is_numeric($key)) {
                    $sql .= $front . ' ('.to_sqls($val).')';
                    continue;
                }
                if (strtoupper($key) == 'OR'){
                    $sql .= ' OR ('.to_sqls($val," $key ").')';
                    continue;
                }
                $sql .= $sql ? " $front `$key` = '$val' " : " `$key` = '$val' ";
            }
            $sql = preg_replace( '/^\s*'.$front.'\s*/', '', $sql );
            $sql = preg_replace( '/\s*'.$front.'\s*$/', '', $sql );
            $sql = trim($sql);
            return $sql;
        } else {
            return $data;
        }
    }
}


$where = array();
$where['id'] = '250'; //等于条件
$where[] = "end_time > '{$daytime}'";//自写条件
$where['OR'] = array("end_time <> '{$daytime}'","1end_time <> '{$daytime}'");//OR无限嵌套条件
$where[] = array(array("end_time <> '{$daytime}'","1end_time <> '{$daytime}'"));//自写无限嵌套条件
$sql = to_sqls($where);
print($sql);exit;

生成结果
`id` = '250'  AND  (end_time > '1310622101') OR ((end_time <> '1310622101') OR  (1end_time <> '1310622101')) AND  (((end_time <> '1310622101') AND  (1end_time <> '1310622101')))

接到 Where 后就行了多爽 欢迎拍砖

作者: zhidc   发布时间: 2011-07-14

哥可以理直气壮的说, 哥的每一条SQL语句, 哥都是精雕细琢了的.
如果说编程是门手艺活, SQL语句便是手艺中的手艺了. 流水线上出来的东西, 能跟手艺相比?

作者: sztime   发布时间: 2011-07-14