MYSQL order by 如何为列使用其他名称?

MYSQL order by how to use other name for column?

这是我的PHP文件的一段,数据库是MySQLi:

$order = $_GET["order"];

mysqli_query($connect,"SELECT * FROM table WHERE activ = '1' ORDER BY $order LIMIT $start, $end);

现在,如果我想按最新排序,我的 url 将如下所示:

mysite.com/index.php?order=date DESC

但这看起来不太好。

如何为日期 DESC 使用其他名称,例如 'newest'?

mysite.com/index.php?order=newest

提前致谢!!

此致。

$order = $_GET["order"];
if ( $order == "newest" )
{
    $order = "DESC";
}
else
{
    $order = "ASC";
}

这将根据其初始值重新分配 order 的值。

对于与 newest 不完全匹配的任何排序顺序,这也会为您提供默认值 ASC

请注意,如果您最终做了其他事情,您发布的代码很容易 SQL 注入; you should be sure to sanitize all your strings.

查询字符串需要包含在"".

您提供的代码段是否有效?如果没有,需要检查一些事项:

1) 确保您的 $connect 信息正确无误。

2) 确保 table 是您的 table.

的名称

3) 确保 activ 是您的 table 中的一列。并且存储在那里的值是布尔数据类型。

4) 确保 date 是您的 table 中的一列,并且您使用的日期类型正确存储在 table.

5) 请注意,根据您使用的变量名称,LIMIT 需要从某个偏移量 到 return 的 条记录的参数$start$end,我假设您使用的 LIMIT 不正确。 $number_of_records$offset.

更合适

6) 检查错误日志以查看数据库服务器或域服务器本身是否记录了错误。

现在,如果该查询有效...

Matt Clark 处理了下面关于 ASCDESC 的其余问题,请参阅 。但很明显,您不能只使用 ASCDESC 而不指定要排序的键,例如 date 列。所以查询字符串看起来像这样:

"SELECT * FROM table WHERE activ = '1' ORDER BY date $order LIMIT $start, $end"

另一种选择,如果您的查询变得更加复杂并且不仅与按日期排序有关,那么您可能会求助于为您的 URL.

提供多个变量

mysite.com/index.php?sortby=date&order=newest

"SELECT * FROM table WHERE activ = '1' ORDER BY $sortby $order LIMIT $start, $end"

您可以从这个 post 中了解有关 URL 中的多个变量的更多信息:Passing multiple variables to another page in url 和其他类似的内容。

我认为这里有两种获取数据库信息的方法, 但我必须澄清你的一些论点:

1).您从 $_GET['order'] 获得的值必须是 ascdesc.

2).是您的查询有误,您的订单后必须有一个列名。 它应该看起来像这样 order by column_name $order.

3).您是否可能将 activ 拼错为 active。不管怎样,我在下面的查询中关注你的专栏名称。

4).我不明白 $end.

的目的是什么

5). 不管怎样,这里有一个在您的数据库中获取信息的简单方法。

  1. 如果每次用户都必须 insert/add 一些数据到 table,你可以简单地按 ID 排序。

    $query = mysqli_query($connnect, "select * from table where activ = '1' order by id $order limit by $start");

  2. 如上所示。我假设您收到了订单日期。所以,如果条件真的在于日期,您的查询应该完全像这样。注意:我写的日期是小写的,所以请注意你的日期列名称是 DATE 还是 Date 或 date 还是什么。

    $query = mysqli_query($connect, "select * from table where activ = '1' order by date $order limit $start");

我只是想帮忙。抱歉别喷我。