Php 根据筛选变量构造查询

Php 根据筛选变量构造查询,php,mysql,codeigniter,Php,Mysql,Codeigniter,基本上,我需要从几个不同的表中获取一组数据并显示出来,具体取决于过滤器的值(下拉框、滑块和标记) 以下是我目前的疑问: $query_string = 'SELECT DISTINCT * FROM users JOIN user_subjects ON users.id = user_subjects.user_id JOIN user_notifications ON users.id = use

基本上,我需要从几个不同的表中获取一组数据并显示出来,具体取决于过滤器的值(下拉框、滑块和标记)

以下是我目前的疑问:

$query_string = 'SELECT DISTINCT * FROM users
                        JOIN user_subjects ON users.id = user_subjects.user_id
                        JOIN user_notifications ON users.id = user_notifications.user_id
                        ';

if ($subjects != 'false') {
        if (count($subjects) > 1)
        {
            // If there is more than 1 subject tag
            $query_string .= ' WHERE user_subjects.subject_id = '.$subjects[0];

            foreach ($subjects as $subject) {
                $query_string .= ' OR user_subjects.subject_id = '.$subject;
            }
        }   
        else if (count($subjects) == 1) 
        {
            // If there's only 1 subject tag, select it only
            $query_string .= " WHERE user_subjects.subject_id = ".$subjects[0];
        }
}


    if ($subscription != 'All Subscriptions')
    {
        $query_string .= ' AND users.user_plan = "'.$subscription.'"';
    }
因此,查询的这一部分基本上正常工作,但我还需要根据过滤器从另一个表中选择数据

额外表(名为“用户通知”)中的数据如下所示: -用户id -行动 -实体id -经验奖 -时间戳


所以基本上我需要把这个表和用户的信息联系起来,然后得到我需要的一切。抱歉,如果这不是特别清楚。我自己还在努力想办法。如果没有,请告诉我。

我猜是由于OR和问题,查询无法工作。使用括号

if (count($subjects) > 1)
        {
            // If there is more than 1 subject tag
            $query_string .= ' WHERE (user_subjects.subject_id = '.$subjects[0];

            foreach ($subjects as $subject) {
                $query_string .= ' OR user_subjects.subject_id = '.$subject;
            }
             $query_string .= ')';
        }   

好吧,看来这确实有帮助。我在查询的另一部分添加了更多内容:“$quick\u query.=”和user\u notifications.action=“quick\u gold”或user\u notifications.action=“quick\u silver”或user\u notifications.action=“quick\u brown”;”似乎只检查第一个?我建议添加括号,例如
WHERE(user_subjects.subject_id=1或user_subjects.subject_id=2)和(users.user_plan=2)和(user_notifications.action=“测验金”或user_notifications.action=“测验银”)
。这会给你一个线索吗?这都是关于运算符优先级的。或者运算符优先级低于和。你可以检查一下。我成功了!谢谢。现在我需要做更多的事情。首先,我需要获得总经验奖励。我试着在开头写上:“选择*,总和(用户通知。经验奖励)作为总经验”,但它会返回意外的结果。为什么会这样?您是否在mysql中运行了该查询?选择似乎很好。