Datatables服务器端处理和列别名

Datatables服务器端处理和列别名,datatables,Datatables,在使用服务器端处理的数据表中,指定列时是否可以使用列别名 目前,这在以下情况下运行良好: $aColumns = array( 'datetime','username', 'user_ip', 'company', 'action' ); 但我想在MySQL中使用date format更改日期格式,因此,实际上,我想使用: $aColumns = array( 'DATE_FORMAT(datetime, "%d/%m/%Y - %H:%i:%s") as newdate';'usernam

在使用服务器端处理的数据表中,指定列时是否可以使用列别名

目前,这在以下情况下运行良好:

$aColumns = array( 'datetime','username', 'user_ip', 'company', 'action' );
但我想在MySQL中使用date format更改日期格式,因此,实际上,我想使用:

$aColumns = array( 'DATE_FORMAT(datetime, "%d/%m/%Y - %H:%i:%s") as newdate';'username'; 'user_ip';'company'; 'action' );
问题在于别名有一个逗号,而aColumns数组是逗号分隔的,因此在稍后出现以下情况时会中断,例如:

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    FROM   $sTable
    $sWhere
    $sOrder
    $sLimit
";
有没有办法使用别名而不是原始值?即使只是简单地更改select语句也不起作用,因为整个脚本中都使用aColumns,因此需要正确设置该值


谢谢

是的。事实上,我自己也在为这个问题挣扎。由于JSON输出是通过计算数组中的列数来确定的,并且由于数组内爆,因此必须将列别名添加到$sQuery而不是$aColumns数组中。因此,实际上,$aColumns数组中的列将比需要的少一列。例如,在我的示例中,我需要一个名为
total
的别名,该别名是通过将价格和数量相乘创建的。因此,我将所有未关联的列放在$aColumns数组中,如下所示:

$aColumns = array( 'purchaseID', 'dateOfOrder', 'productID', 'price', 'QTY');
 $sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    FROM   `$sTable`
    $sWhere
    $dateSql
    $sOrder
    $sLimit
";
但是,在$sQuery字符串中,连接了创建正确查询字符串所需的所有内容,我在内爆和FROM之间添加了我的列别名。但不要忘记在内爆后加逗号,因为它不会为您添加逗号。原始的$sQuery字符串如下所示:

$aColumns = array( 'purchaseID', 'dateOfOrder', 'productID', 'price', 'QTY');
 $sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    FROM   `$sTable`
    $sWhere
    $dateSql
    $sOrder
    $sLimit
";
但是我的,加上列别名,看起来像这样:

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    , `price` * `QTY` AS `total` FROM   `$sTable`
    $sWhere
    $dateSql
    $sOrder
    $sLimit
";
while ( $aRow = mysql_fetch_array( $rResult ) )
{
    $row = array();
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( $aColumns[$i] == "version" )
        {
            /* Special output formatting for 'version' column */
            $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
        }
        else if ( $aColumns[$i] != ' ' )
        {
            /* General output */
            $row[] = $aRow[ $aColumns[$i] ];
        }
    }
    $output['aaData'][] = $row;
}
for ( $i=0 ; $i<count($aColumns) + 1; $i++ )
    {
        if ($i < count($aColumns)){
            if ( $aColumns[$i] == "version" )
            {
                /* Special output formatting for 'version' column */
                $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
            }
            else if ( $aColumns[$i] != ' ' )
            {
                /* General output */
                $row[] = $aRow[ $aColumns[$i] ];
            }
        }
        else {
            $row[] = $aRow['total'];
        }

    }
    $output['aaData'][] = $row;
}
最后,您必须做的最后一件事是更改实际的JSON输出,以确保在JSON_编码之前末尾的for循环中考虑到您的额外列,因为它会将项插入到$row数组中,这就是根据您在$aColumns数组中指定的列数而变为“aaData”(返回的行数据),由于您遗漏了任何别名,因此计数将是错误的,并且您将得到一个类似于“从数据源行请求未知参数”的错误。原始FOR循环如下所示:

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    , `price` * `QTY` AS `total` FROM   `$sTable`
    $sWhere
    $dateSql
    $sOrder
    $sLimit
";
while ( $aRow = mysql_fetch_array( $rResult ) )
{
    $row = array();
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( $aColumns[$i] == "version" )
        {
            /* Special output formatting for 'version' column */
            $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
        }
        else if ( $aColumns[$i] != ' ' )
        {
            /* General output */
            $row[] = $aRow[ $aColumns[$i] ];
        }
    }
    $output['aaData'][] = $row;
}
for ( $i=0 ; $i<count($aColumns) + 1; $i++ )
    {
        if ($i < count($aColumns)){
            if ( $aColumns[$i] == "version" )
            {
                /* Special output formatting for 'version' column */
                $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
            }
            else if ( $aColumns[$i] != ' ' )
            {
                /* General output */
                $row[] = $aRow[ $aColumns[$i] ];
            }
        }
        else {
            $row[] = $aRow['total'];
        }

    }
    $output['aaData'][] = $row;
}
while($aRow=mysql\u fetch\u数组($rResult))
{
$row=array();
对于($i=0;$i)