首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同结果的mySQL中,是否有一种有效的搜索变量的方法?

在不同结果的mySQL中,是否有一种有效的搜索变量的方法?
EN

Stack Overflow用户
提问于 2014-07-27 14:03:21
回答 1查看 50关注 0票数 0

我有一个相当复杂的问题,由于规格,我一直没有找到任何帮助。挠了几个月的头。

我有多个参数,但是在这个问题中,我只关注3个参数

  • 类别($cat)
  • 子范畴($sub)
  • 体裁($gen)

MySQL栏:

代码语言:javascript
运行
复制
id | category | subcategory | genre | account | date_received | date_modified

(指定帐户: 1-3)

我希望得到的结果是:

  • 如果只提供分类:首先是行account = 1,然后是date_received,然后是date_modified (不优先考虑帐户2 & 3)
  • 如果只提供类别和子类别:首先是行account = 1account = 2,然后是date_received,然后是date_modified (不优先考虑帐户3)
  • 如果只提供分类和子类别和体裁:首先是行account = 1account = 2account = 3,然后是date_received,然后是date_modified

到目前为止我有这样的想法:

代码语言:javascript
运行
复制
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 
                        "); }

是否有一种有效的方法来梳理这些和回响不同的结果?感觉真的很乱。

非常感谢大家给出的任何建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-27 14:19:21

将所有条件放在数组中,将首选帐户放在变量中。

代码语言:javascript
运行
复制
$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);
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24981746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档