select の orderby

selectに当たり前のようにつけるorder by
わすれている。
ついでにcountとoffsetでの取得を追加。




// select Count
public static function selectCount( $pdo, $tblname, $fields, $where )
{
$sql = CDbMethods::selectStr( $tblname, $fields, $where, null );
$sql = " SELECT COUNT(*) AS CT FROM ( ".$sql." )";

$params = CDbMethods::whereParams( $where );

$pdost = CDbMethods::sqlExec( $pdo, $sql, $params );
$result = $pdost->fetchAll();

return $result[0][ 'CT' ];
}

// select offset
public static function selectOffset( $pdo, $tblname, $fields, $where, $offset, $limit )
{
$sql = CDbMethods::selectStr( $tblname, $fields, $where, null );
$sql = $sql." LIMIT ".$limit." OFFSET ".offset;

$params = CDbMethods::whereParams( $where );

$pdost = CDbMethods::sqlExec( $pdo, $sql, $params );

return $pdost->fetchAll();
}

// select
public static function select( $pdo, $tblname, $fields, $where, $orderby, $forupdate=false )
{
$ret = -1;
$sql = "";

$sql = CDbMethods::selectStr( $tblname, $fields, $where, $orderby );

if ( $forupdate ) {
$sql = $sql." FOR UPDATE ";
}

$params = CDbMethods::whereParams( $where );

$pdost = CDbMethods::sqlExec( $pdo, $sql, $params );

return $pdost->fetchAll();
}

// selectStr
private static function selectStr( $tblname, $fields, $where, $orderby )
{
$sql = "";
$sql = $sql." SELECT ";
$ct = 0;
for ( $i = 0; $i < count($fields); $i++ ) {
if ( $ct > 0 ) {
$sql = $sql.", ";
}
$sql = $sql.$fields[$i];
$ct++;
}
$sql = $sql." FROM ".$tblname;

$sql = $sql.CDbMethods::whereStr( $where );

if ( $orderby ) {
$sql = $sql." ORDER BY ";
$ct = 0;
for ( $i = 0; $i < count($orderby); $i++ ) {
if ( $ct > 0 ) {
$sql = $sql.", ";
}
$sql = $sql.$orderby[$i];
$ct++;
}
}

return $sql;
}




あらら、、、
http://d.hatena.ne.jp/be-cool/20090303/1236092101