【问题标题】:How to ORDER BY with different columns as one column?如何将不同的列作为一列进行排序?
【发布时间】:2014-11-16 00:38:25
【问题描述】:

我有以下代码:

$db = $this->database[GDB];
$num_rows = $db->doQuery('SELECT TOP 100 strUserId, TotalTime, Nation, LoginDT FROM USERDATA WHERE Authority IN(1, 2) ORDER BY TotalTime DESC');
if ($num_rows == -1)
{
$db->getError();
return;
}

我想做的是:

ORDER BY 这样:

TotalTime + (time() + 7200 - LoginDT)

如何在上面的查询中做到这一点?

我使用 MSSQL Server 2005

【问题讨论】:

  • ORDER BY TotalTime + (time() + 7200 - LoginDT)
  • 不工作,有错误,没有出现
  • 我的意思是它不起作用并且有错误。什么都没有出现,只是不算数。可能我正在使用 MSSQL Server 2005,但不应该因为所有 time() 等都受支持。有没有其他办法?
  • time() + 7200 常量用于订购什么?试试TotalTime - LoginDT
  • @MokIk 你说的time() 是什么意思我认为time() 不是sql server 中的内置函数

标签: php sql-server


【解决方案1】:

你试过了吗

SELECT TOP 100 strUserId, TotalTime + (time() + 7200 - LoginDT) as
newTotalTime, Nation, LoginDT FROM USERDATA WHERE Authority IN(1, 2)
ORDER BY newTotalTime DESC

【讨论】:

  • 我没有,因为我在脚本下面的列中使用了这些值,并且我需要单独使用它们。有什么方法可以将它们分组并仍然单独使用它们吗?
  • TotalTime + (time() + 7200 - LoginDT) as newTotalTime 将在 sql 结果中作为单独的列返回。基本上,sql 将返回 strUserId、newTotalTime、Nation、LoginDT,newTotaltime 以 desc 排序
  • 我的意思是我需要 TotalTime 作为独立于 newTotalTime 之上。我怎样才能做到这一点?
  • 您可以在查询中将其添加为 'SELECT TOP 100 strUserId, (TotalTime + (time() + 7200 - LoginDT)) as newTotalTime, Nation, LoginDT, TotalTime FROM USERDATA WHERE Authority IN(1 , 2) ORDER BY newTotalTime DESC'
【解决方案2】:

您可以将查询更改为此

$num_rows = $db->doQuery('SELECT TOP 100 strUserId, TotalTime, Nation, LoginDT FROM USERDATA WHERE Authority IN(1, 2) ORDER BY (TotalTime + ('.time().' + 7200 - LoginDT)) DESC');

请注意,查询与 time() 连接,因为它是 PHP 函数,而不是 SQL Server 函数。

这是生成的查询

SELECT TOP 100 strUserId, TotalTime, Nation, LoginDT FROM USERDATA WHERE Authority IN(1, 2) ORDER BY (TotalTime + (1416132847 + 7200 - LoginDT)) DESC

演示:http://codepad.org/vSR2FJ8C

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2022-10-04
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多