2012-02-09 174 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