2011-11-10 1 views
0

おそらく私はここにマインドブロックを持っていますが、このクエリではAND句が正しく動作するように見えません。私はあなたがIVは= 0承認ところ、これは、クエリが、その返す結果を破壊しない、それを追加しようとしました見ることができるようtbl_mod_Lessons.Approved = 1MysqlこのクエリにAND句を追加します

$sql = "SELECT *, 
       (SELECT AVG(intRating) FROM tbl_mod_LessonReviews LR WHERE LR.intLessonID = LS.intLessonID) rating, 
       (SELECT strContentArea FROM tbl_mod_ContentAreas CA WHERE CA.intCAID = LS.intContentAreaID) strContentArea 
      FROM tbl_mod_Lessons LS 
      WHERE 
       (LS.strTitle LIKE $search_string) OR 
       (LS.strStandards LIKE $search_string) OR 
       (LS.strDescription LIKE $search_string) OR 
       (LS.strActivities LIKE $search_string) OR 
       EXISTS(SELECT strContentArea FROM tbl_mod_ContentAreas CA WHERE CA.intCAID = LS.intContentAreaID AND (CA.strContentArea LIKE $search_string)) 
       AND (LS.Approved = 1) 
      ORDER BY ".$pager->getOrder("LS.intLessonID DESC")." 
      LIMIT ".$pager->PageLimits(); 

結果を返すようにしたいです。

+0

ORはOR以上の居住地である場合があります。 OR塊の全体を括弧内に入れ、それを修正する必要があります。つまり、EXISTS()とApproved = 1を評価してから、他のORを評価します。 –

答えて

1

以下を試してください。私はあなたのOR句の周りにいくつかの角括弧を追加しました。

$sql = "SELECT *, 
       (SELECT AVG(intRating) FROM tbl_mod_LessonReviews LR WHERE LR.intLessonID = LS.intLessonID) rating, 
       (SELECT strContentArea FROM tbl_mod_ContentAreas CA WHERE CA.intCAID = LS.intContentAreaID) strContentArea 
      FROM tbl_mod_Lessons LS 
      WHERE (
        (LS.strTitle LIKE $search_string) OR 
        (LS.strStandards LIKE $search_string) OR 
        (LS.strDescription LIKE $search_string) OR 
        (LS.strActivities LIKE $search_string) OR 
        EXISTS(SELECT strContentArea FROM tbl_mod_ContentAreas CA WHERE CA.intCAID = LS.intContentAreaID AND (CA.strContentArea LIKE $search_string)) 
       ) 
       AND (LS.Approved = 1) 
      ORDER BY ".$pager->getOrder("LS.intLessonID DESC")." 
      LIMIT ".$pager->PageLimits(); 
1

あなたの周りのように、すべてのOR AND

WHERE 
       ((LS.strTitle LIKE $search_string) OR 
       (LS.strStandards LIKE $search_string) OR 
       (LS.strDescription LIKE $search_string) OR 
       (LS.strActivities LIKE $search_string) OR 
       EXISTS(SELECT strContentArea FROM tbl_mod_ContentAreas CA 
       WHERE CA.intCAID = LS.intContentAreaID 
       AND (CA.strContentArea LIKE $search_string))) 
       AND (LS.Approved = 1) 
0

()と他のすべてのorの句を囲みますからそれらを分離するための条件を括弧を追加する必要があります。そうでなければ、最後の句はANDです。

+0

ありがとう、みんな私が行方不明だったことthats! – user794846

関連する問題