Php 如何设置;“订购”;两个案子?

Php 如何设置;“订购”;两个案子?,php,mysql,sql-order-by,Php,Mysql,Sql Order By,在mysql中,我需要为两种情况设置“orderby”:name或mod_1,这取决于用户在组合框中选择的内容。我的问题是: SELECT name, SUM(IF(mod = 1, 1, 0)) AS mod_1, SUM(IF(mod = 2, 1, 0)) AS mod_2, SUM(IF(mod = 3, 1, 0)) AS mod_3 FROM DW_RM_Log WHERE ... ORDER BY name (or mod_1

在mysql中,我需要为两种情况设置“orderby”:name或mod_1,这取决于用户在组合框中选择的内容。我的问题是:

SELECT
    name,
    SUM(IF(mod = 1, 1, 0)) AS mod_1,
    SUM(IF(mod = 2, 1, 0)) AS mod_2,
    SUM(IF(mod = 3, 1, 0)) AS mod_3
FROM
    DW_RM_Log
WHERE
    ...
ORDER BY
    name (or mod_1 DESC)

是否可以在mysql中执行此操作,或者我需要在php中编写代码?或者两者兼而有之?

无聊到可以为您这样做:

$q = "SELECT
    name,
    SUM(IF(mod = 1, 1, 0)) AS mod_1,
    SUM(IF(mod = 2, 1, 0)) AS mod_2,
    SUM(IF(mod = 3, 1, 0)) AS mod_3
FROM
    DW_RM_Log
WHERE
    ...
ORDER BY ";

if ($x) {
    $q .= "name DESC";
} else {
    $q .= "mod_1 DESC";
}
 //run $q!

只要在php中生成一个适当的查询并运行它就可以了,但我不希望每种情况下都有两个查询…在运行时使用适当的
orderby
追加一个查询90%的查询不会改变,只需追加
orderby
子句即可