1

ログインシステムを構築しようとしています。しかし、クエリを作成するときに問題が発生します。必要なものを簡単に説明します。ログインフォームを取得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)
)
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 に答える