根据过滤器变量构造查询

时间:2012-06-22 00:23:24

标签: 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 = 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.'"';
    }

所以查询的一部分大部分都在工作,但我还需要从另一个表中选择数据,具体取决于过滤器。

额外表格中的数据(名为“user_notifications”)如下: - 用户身份 - 行动 - entity_id - exp_rewarded - 时间戳

所以基本上我需要将这个表与用户的信息链接起来并获得我需要的一切。对不起,如果不是特别清楚。我还在努力弄清楚自己。如果不是,请告诉我。

1 个答案:

答案 0 :(得分:0)

我的猜测是由于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 .= ')';
        }