Подсчет строк в левой объединенной таблице - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть 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 в таблице журнала)

1 Ответ

1 голос
/ 09 февраля 2012

Просто измените запрос на это -

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

Существует также ряд других способов сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...