2012-02-09 142 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在當前簽名,以防止從不同的第二登錄。瀏覽器我想在用戶表(基本登入程序)首先檢查電子郵件,並在那一刻檢查,如果用戶沒有登錄(通過計算行,其中狀態= 1日誌表)

+0

你能提供你期望得到的結果?只是一些示例數據。由於 – 2012-02-09 06:12:14

+0

@MostyMostacho我想要做的很簡單:我想從日誌表中獲取狀態= 1個的行數爲變量。如果這個變量> 0會顯示錯誤信息並阻止登錄,如果不是,那麼將繼續登錄過程 – heron 2012-02-09 06:14:58

回答

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 2012-02-09 06:20:12

+0

是 - 你也可以做'COUNT(IF(u2.status = 1,1,NULL))AS status',但是這更多的輸入。 – 2012-02-09 06:24:03