2013-02-05 92 views
1

我想建立一個登錄系統。但是當我爲它創建查詢時遇到問題。我將簡要解釋我需要的是什麼。我有usernamepassword表單登錄表單。現在我需要使用我的登錄表天氣檢查這些值是否存在於表中。以及我需要檢查用戶的註冊是否已過期或使用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) 
) 
+0

有時它可以幫助獲取SQL並創建一個視圖。你能製作一個視圖來顯示你需要返回的所有行嗎?可能只是去除霧。至於定義用戶的'狀態',你可能想使用一個位掩碼來定義所有這些'標誌'在一個單一的值。儘管如此,這種做法有利有弊。 – ficuscr

+0

@ficuscr您的評論完全不清楚。我沒有任何在sql中創建視圖的經驗 – TNK

+0

後端是什麼? MySQL的?您正在使用的SQL現在是否提供任何錯誤? (嘗試直接使用你使用的任何工具或命令行來運行它)。至於視圖,它們只是掩蓋底層的SQL。可以幫助作爲一個門面,以掩蓋陳述的複雜性並使其更有用。 – ficuscr

回答

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

我已經分手了您的查詢。這只是你的問題的答案的開始。我還不清楚你需要的所有要求。

如果您可以發佈一些具有所需輸出的示例數據,我將能夠進一步幫助您。

+0

當查詢運行時輸出一個空集。但我提供了正確的用戶名和密碼 – TNK

+0

我會避免使用輸入變量周圍的空格。如果添加意外空間,可能會出現問題 –

+0

在用戶成功登錄到系統後,我需要在會話中存儲用戶名login_type。 – TNK