1

我正在尝试建立一个登录系统。但是当我为它创建查询时遇到问题。我将简要解释我需要的是什么。我已经得到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)
)
4

1 回答 1

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";

我已经拆分了您的查询。这只是您问题答案的开始。我仍然不清楚您需要的所有要求。

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

于 2013-02-05T17:48:13.950 回答