2012-02-09 2 views
0

사용자와 로그가 2 개인 테이블이 있습니다. 현재 내 쿼리는 그렇게 보입니다.왼쪽으로 연결된 테이블의 행 수를 계산합니다.

 $stmt = $this->db->prepare("SELECT u.id, u.email, u.salt, u.pass, u.approved, u.ban, u2.status FROM `users` AS u LEFT OUTER JOIN `log` AS u2 ON u2.user_id = u.id WHERE u.email = ?") or die($this->db->error); 
     $stmt->bind_param("s", $_POST['email']) or die($stmt->error); 
     $stmt->execute(); 
     $stmt->store_result(); 
     if ($stmt->num_rows == 0) { 
      die($this->ajax->respond(7)); 
     } 
     $data = array(); 
     $stmt->bind_result($data['id'], $data['email'], $data['salt'], $data['pass'], $data['approved'], $data['ban'], $data['status']) or die($stmt->error); 
     $stmt->fetch() or die($stmt->error); 
     $stmt->close() or die($stmt->error); 

로그 테이블의 상태 열은 사용자가 이미 로그인했는지 여부를 나타냅니다. 내가하고 싶은 일은 users 테이블에 이메일이 있는지 확인하고 log 테이블의 행 수를 status=1으로 계산하는 것입니다. 그것은 하나의 유일한 쿼리로 가능합니까? 즉

: 여기

로그 테이블

enter image description here

상태 = 1이 사용자 1은 현재 로그인되어 있음을 나타냅니다 행을 살펴보십시오 다른에서 두 번째 로그인 절차를 방지하기 위해. 브라우저 사용자 테이블 (기본 로그인 절차)에서 이메일을 먼저 확인하고 그 순간 로그인하지 않았는지 확인하십시오 (로그 테이블에서 status = 1 인 행을 계산하여)

+0

예상되는 결과를 제공 할 수 있습니까? 그냥 몇 가지 예제 데이터. 감사합니다 –

+0

@MostyMostacho 내가 원하는 일은 간단합니다 : 변수의 로그 테이블에서 상태 = 1 행 수를 얻고 싶습니다. 이 변수> 0이 오류 메시지를 표시하고 로그인을 방지하면 로그인 프로세스가 계속됩니다. – heron

답변

1

쿼리를 t 그의 -

SELECT u.id, u.email, u.salt, u.pass, u.approved, 
u.ban, SUM(u2.status) AS status FROM `users` AS u 
LEFT JOIN `log` AS u2 ON u2.user_id = u.id 
WHERE u.email = ? 
GROUP BY u.id 

다른 방법으로도이를 수행 할 수 있습니다.

+0

무엇이'상태 '가 나에게 줄 것입니까? 로그에서 status = 1 인 행 수? – heron

+0

예 - 'COUNT (IF (u2.status = 1, 1, NULL)) AS 상태'를 수행 할 수도 있지만 입력이 더 많습니다. –

관련 문제