2012-06-22 51 views
0

基本上,我需要從幾個不同的表得到一組數據並顯示它,這取決於過濾器的值(下拉框,滑塊和標籤)構建查詢取決於過濾變量

這裏是我的查詢的時刻:

$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')如下: - USER_ID - 行動 - ENTITY_ID - exp_rewarded - 時間戳

所以基本上我需要這個表與鏈接用戶的信息,並獲得我需要的一切。對不起,如果這不是特別清楚。我仍然試圖找出自己。讓我知道如果它不是。

回答

0

我的猜測是由於OR AND問題導致查詢無法正常工作。使用括號。

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 .= ')'; 
     } 
+0

好吧,以便絕對看起來有所幫助。我還有另一部分查詢正在添加更多: 「$ quiz_query。='AND user_notifications.action =」quiz_gold「或user_notifications.action =」quiz_silver「或user_notifications.action =」quiz_bronze「';」 它似乎只檢查第一個? – Sneaksta

+0

我建議添加括號,例如。 WHERE(user_subjects.subject_id = 1或user_subjects.subject_id = 2)AND(users.user_plan = 2)AND(user_notifications.action =「quiz_gold」或user_notifications.action =「quiz_silver」)'。這會給你一個線索嗎? – sel

+0

這是關於運算符優先級的全部內容。 OR具有比AND更低的運算符優先級。你可以檢查[this](http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html)。 – sel