通过PHP按动态SQL语句排序

通过PHP按动态SQL语句排序,php,sql,sql-order-by,Php,Sql,Sql Order By,我有一个PHP脚本,它从HTML表单接收值并结合SQL语句 我有列名为col1,col2,col5 声明 ... ORDER BY x, y, z, i, j; 是这样工作的:如果选中了col1的复选框,则x=col1其余的都是相同的。不起作用的是,当我不勾选某些框时——例如,我只想按col1和col4排序,所以我将它们都勾选,然后语句生成 ORDERY BY col1, y, z, col4, j 但是我还检查了col1的复选框是否为空,如果为空,它会将x的值更改为,这里我要说的是,我已经

我有一个PHP脚本,它从HTML表单接收值并结合SQL语句

我有列名为
col1,col2,col5

声明

... ORDER BY x, y, z, i, j;
是这样工作的:如果选中了
col1
的复选框,则
x=col1
其余的都是相同的。不起作用的是,当我不勾选某些框时——例如,我只想按col1和col4排序,所以我将它们都勾选,然后语句生成

ORDERY BY col1, y, z, col4, j
但是我还检查了
col1
的复选框是否为
空,如果为空,它会将
x
的值更改为,这里我要说的是,我已经尝试在没有选中任何复选框的情况下输入
1=1,NULL,col1
(其余的都是相同的
y,z,I,j

因此,我需要的是一些聪明的方法,使声明按预期的方式工作


当我将
x,…,j
的所有值更改为
1=1
时,该语句只适用于1复选框,但当我选中2时,它不按它们排序。

如果相应的复选框未选中,为什么不完全删除一列呢

$sql = "SELECT * FROM table";
$ordercolumns = array();
if (isset($_POST['col1'])) {
   $ordercolumns[] = 'x';
}
...
if (isset($_POST['col5')) {
   $ordercolumns[] = 'j';
}
if (sizeof($ordercolumns) > 0) {
   $sql .= ' ORDER BY ' . implode(',', $ordercolumns);
}