PHP按主键返回查询结果集
我试图按发布日期的降序从数据库中获取前X行,但是我发现,如果直接在本地数据库上执行查询,则查询效果会非常好,而在PHP中,结果集总是按照主键的顺序。 下面是一段代码:PHP按主键返回查询结果集,php,mysql,sql,sql-order-by,Php,Mysql,Sql,Sql Order By,我试图按发布日期的降序从数据库中获取前X行,但是我发现,如果直接在本地数据库上执行查询,则查询效果会非常好,而在PHP中,结果集总是按照主键的顺序。 下面是一段代码: public static function getList( $numRows=1000000, $order="publicationDate DESC" ) { $conn = new PDO( db_host, db_user, db_pw ); $sql = "SELECT SQL_CALC_FOUND_ROWS *,
public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM blogs
ORDER BY " . ":order" . " LIMIT :numRows";
$st = $conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->bindValue( ":order", $order, PDO::PARAM_STR);
$st->execute();
$list = array();
while ( $row = $st->fetch() ) {
echo $row['id'];
$article = new Blogpost( $row );
$list[] = $article;
}
// Now get the total number of articles that matched the criteria
$sql = "SELECT FOUND_ROWS() AS totalRows";
$totalRows = $conn->query( $sql )->fetch();
$conn = null;
return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
}
运行时,echos的输出如下所示:
5051525354
数据库是使用此查询创建的(用于显示结构):
我试过运行不同的查询,它总是按主键的升序返回。为什么?不能参数化标识符,例如列名、表名、函数和运算符 假设您认为您是通过以下方式订购的:
order by views
实际上,这是:
order by 'views' -- a constant string
我猜MySQL足够聪明,知道按字符串排序是无用的,所以它会按照读取数据的顺序返回。注意:不能保证这是主键顺序,尽管通常是这样
不幸的是,您将不得不损坏查询字符串,以便生成:
order by views -- or whatever column you want
弄乱查询字符串是什么意思?publicationDate是一种日期数据类型(实际上是unix时间戳),因此它不应该有issue@peterxz . . . 将额外字符串放入查询字符串中。如果所有的东西都可以作为一个参数输入(您正在做的),那就太好了。唉,这种情况是不可能的。啊,我明白你的意思。谢谢我通过将其从参数中取出并直接放入查询中来解决它。但如果我想在上升和下降之间切换,有什么办法吗?或者我应该预写这两个查询并决定使用if块吗?使用两个不同的
orderby
子句(然后可以将它们附加到相同的基本查询)。您可以执行类似于排序方式(case when?=“ASC”然后是X end)ASC、X desc的操作,但是我认为构建order by
子句更简单。
order by views -- or whatever column you want