我正在尝试建立一个登录系统。但是当我为它创建查询时遇到问题。我将简要解释我需要的是什么。我已经得到username
并password
形成登录表格。现在我需要用我的登录表天气检查这些值是否存在于表中。以及我需要检查用户的注册是否已过期或不在使用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)
)