我想建立一個登錄系統。但是當我爲它創建查詢時遇到問題。我將簡要解釋我需要的是什麼。我有username
和password
表單登錄表單。現在我需要使用我的登錄表天氣檢查這些值是否存在於表中。以及我需要檢查用戶的註冊是否已過期或使用tutors , institutes and students
表的相同查詢。學生註冊不過期。此外,我需要檢查他們的個人資料被激活或不使用active
專欄和導師和研究所表。學生表再次沒有列'active
'。他們不需要激活他們的個人資料。我如何使這個MySQL查詢
這些是我需要從查詢中獲得的列。
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)
)
有時它可以幫助獲取SQL並創建一個視圖。你能製作一個視圖來顯示你需要返回的所有行嗎?可能只是去除霧。至於定義用戶的'狀態',你可能想使用一個位掩碼來定義所有這些'標誌'在一個單一的值。儘管如此,這種做法有利有弊。 – ficuscr
@ficuscr您的評論完全不清楚。我沒有任何在sql中創建視圖的經驗 – TNK
後端是什麼? MySQL的?您正在使用的SQL現在是否提供任何錯誤? (嘗試直接使用你使用的任何工具或命令行來運行它)。至於視圖,它們只是掩蓋底層的SQL。可以幫助作爲一個門面,以掩蓋陳述的複雜性並使其更有用。 – ficuscr