ログインシステムを構築しようとしています。しかし、クエリを作成するときに問題が発生します。必要なものを簡単に説明します。ログインフォームを取得username
しました。password
次に、ログインテーブルの天気でこれらの値を確認する必要があります。これらの値は、テーブルに存在するかどうかを確認します。tutors , institutes and students
また、テーブルを使用して同じクエリでユーザーの登録の有効期限が切れているかどうかを確認する必要があります。学生登録の有効期限はありません。さらに、彼らのプロフィールがアクティブになっているかactive
、家庭教師や機関のテーブルの列を使用していないかを確認する必要があります。ここでも、studentsテーブルには列''がありません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)
)