我怎样才能进行这个mysql查询

时间:2013-02-05 17:24:45

标签: php mysql sql

我正在尝试构建一个登录系统。但是当我为它创建查询时遇到问题。我将简要解释一下我的需求。我有usernamepassword表单登录表单。现在我需要使用我的登录表天气检查这些值是否存在于表中。我需要使用tutors , institutes and students表检查用户的注册是否已过期或不在同一查询中。学生注册未到期。此外,我需要使用导师和机构表中的active列来检查他们的个人资料是否已激活。学生表再次没有列“active”。他们不需要激活他们的个人资料。

这些是我需要从查询中获取的列。

login_id // From login table
username // From login table
login_type // From login table
date-expire true or false // From tutors or institute or student. 

我尝试了类似这样的东西,但是如何在同一个查询中将所有表连接在一起会让人感到困惑。

$q = "SELECT login_id, username, login_type, IF(date_expires >= NOW(), true, false) 
        FROM login
        INNER JOIN tutors ON login.login_id = tutors.login_id
        INNER JOIN institutes ON login.login_id = institutes.login_id
        WHERE (username='$username' AND password='"  .  get_password_hash($password) .  "' 
                AND (tutors.active IS NULL || institutes.active IS NULL))"; 

但是这个查询不起作用。谁能告诉我我做错了什么?

这是我的表结构

CREATE TABLE login (
login_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(30) NOT NULL, 
password VARBINARY(32) NOT NULL,
login_type ENUM('tutor', 'institute', 'student') NOT NULL,
PRIMARY KEY (login_id)
)


CREATE TABLE institutes (
institute_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
login_id SMALLINT UNSIGNED NOT NULL,
active CHAR(32),
date_expires DATE NOT NULL,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (institute_id)
)   

CREATE TABLE tutors (
tutor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
login_id SMALLINT UNSIGNED NOT NULL,
active CHAR(32),
date_expires DATE NOT NULL,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (tutor_id)
)

CREATE TABLE students (
student_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
login_id SMALLINT UNSIGNED NOT NULL,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (student_id)
)

1 个答案:

答案 0 :(得分:2)

编辑:

$q = "SELECT l.login_id, l.username, l.login_type, t.date_expires
FROM login AS l
INNER JOIN tutors AS t ON l.login_id = t.login_id
WHERE l.username='$username' AND l.password='" . get_password_hash($password) . "'
AND t.date_expires >= NOW()
AND t.active IS NULL";

我已将您的查询拆分。这只是你问题的答案的开始。我还不清楚你需要的所有要求。

如果您可以使用所需的输出发布一些示例数据,我将能够为您提供进一步的帮助。