2014-09-12 6 views
0

동적 쿼리를 작성하고 온라인 사용자에게 반환하는 방법을 찾고 있습니다. 아래 코드를 확인하십시오. 실수 한 부분을 찾을 수 없습니까? 반환의 날 :MySQL | 동적 쿼리 - 온라인 사용자

having is_online = 1 

이 변수가 집계를 사용하여 알 수없는 열 'is_online' 'where 절'에 ...

if (isset($options['online']) && $options['online'] == 1) { 
     $where[] = ' AND is_online = 1'; 
    } 

    $sql = ' SELECT 
     u1.*, 
     u2.*, 
     COUNT(s.userid) AS is_online 
    FROM `#__users`  
    AS 
     u1 
    LEFT JOIN 
     `#__ds_users` 
    AS 
     u2 
    ON 
     u1.id  = u2.id 
    LEFT JOIN 
     `#__session`  
    AS 
     s 
    ON 
     u1.id  = s.userid 
    WHERE 
     1=1 
    '.implode('', $where).' 
    GROUP BY 
    u1.id'; 
+0

당신은 내 솔루션을 여기에서 체크 아웃하고 싶을 수도 있습니다. http://stackoverflow.com/questions/25726512/how-to-insert-dynamic-multidimensional-array-in-database-with-mysqli – SuperDJ

+1

나는 당신이 ' WHERE 조건에서 별칭을 사용하면, 거기에'COUNT (s.userid) = 1'을 사용하거나 서브 쿼리에서 모든 것을 감쌀 수 있어야합니다. – stakolee

답변

1

당신은 having 절에 절 부분을 변경하려면 함수이므로 값을 where 절에 넣을 수 없습니다. 그러나, 당신은 대신 할 수 :

where s.userid is not null 

또는, 더 간단하게 상태를 제거하고 inner joinleft join을 변경합니다.

+0

고마워! 여기서 s.userid가 null로 작동하지 않습니다. – user889349