我有一个相当复杂的问题,由于规格,我一直没有找到任何帮助。挠了几个月的头。
我有多个参数,但是在这个问题中,我只关注3个参数
MySQL栏:
id | category | subcategory | genre | account | date_received | date_modified(指定帐户: 1-3)
我希望得到的结果是:
account = 1,然后是date_received,然后是date_modified (不优先考虑帐户2 & 3)account = 1和account = 2,然后是date_received,然后是date_modified (不优先考虑帐户3)account = 1和account = 2和account = 3,然后是date_received,然后是date_modified到目前为止我有这样的想法:
if ($cat AND empty($sub) AND empty($gen)) {
$run = mysql_query("SELECT *
FROM db
WHERE (category='$cat')
ORDER BY case when account = '1' then 1 else 2 end,
GREATEST(date_received, modified_date, account) DESC ");
} else if ($cat AND $sub AND empty($gen)) {
$run = mysql_query("SELECT *
FROM db
WHERE (category='$cat' AND subcategory='$sub')
ORDER BY case when account = '2' then 1 else 2 end,
GREATEST(date_received, modified_date, account) DESC
");
} else if ($cat AND $sub AND $gen) {
$run = mysql_query("SELECT *
FROM db
WHERE (category='$cat' AND subcategory='$sub' AND genre='$gen')
ORDER BY case when account = '3' then 1 else 2 end,
GREATEST(date_received, modified_date, account) DESC
"); }是否有一种有效的方法来梳理这些和回响不同的结果?感觉真的很乱。
非常感谢大家给出的任何建议。
发布于 2014-07-27 14:19:21
将所有条件放在数组中,将首选帐户放在变量中。
$conds = array();
if ($cat) {
$account = 1;
$conds[] = "category = '$cat'";
}
if ($sub) {
$account = 2;
$conds[] = "subcategory = '$sub'";
}
if ($gen) {
$account = 3;
$conds[] = "genre = '$gen'";
}
if (!empty($conds)) {
$cond_str = implode(' AND ', $conds);
$sql = "SELECT *
FROM db
WHERE $cond_str
ORDER BY IF(account = $account, 1, 2),
GREATEST(date_received, modified_date, account) DESC";
$run = mysql_query($sql);
...
}https://stackoverflow.com/questions/24981746
复制相似问题