2012-05-23 51 views
0

我根據他們所屬的城市在我的網站上呈現來自MySQL的數據輸出。所以我的兩個表格被稱爲login_userscity_selection。所有表都有一個名爲city_id的列。MySQL表。我應該使用交叉引用表嗎?

當到我的網站的用戶的跡象,我問的是什麼設置的city_id數據庫,然後創建一個$_SESSION['city_id']

然後我可以寫我的MySQL querys用WHERE -clause到$_SESSION['city_id']

例如:SELECT firstname, lastname, city_name FROM students JOIN city_selection ON city_selection.city_id = students.city_id WHERE city_selection.city_id = '{$_SESSION['city_id']}'

這工作,但現在我需要一些用戶來顯示城市的一個或多個區域。我的第一個想法是創建一個名爲region_selection的新表,並從表city_selection表中添加一個外鍵給此。但是,我將如何處理登錄用戶應該從一個或多個區域輸出數據的場景?我應該創建某種交叉引用表嗎?

這是我的第一個PHP-MySQL網站,非常適合我!

回答

0

如果每個城市只屬於一個地區,您可以創建region_selection表格,其列region_id | region_name。然後,您將region_id列添加到您的city_selection表中,該表定義城市所屬的區域。

然後,您可以執行這樣的查詢來獲取屬於某一區域的學生:如圖所示創建表region_selection

SELECT firstname, lastname, city_name FROM students 
JOIN city_selection ON city_selection.city_id = students.city_id 
JOIN region_selection ON region_selection.region_id = city_selection.region_id 
WHERE region_selection.region_name = YOUR_REGION_NAME 

如果用戶屬於多個區域,你可以做以下以上。然後創建一個表student_regions與列student_id | region_id以建立學生和地區之間的鏈接。然後

查詢如下所示:

SELECT firstname, lastname, city_name FROM students 
JOIN student_regions ON student_regions.student_id = students.student_id 
JOIN region_selection ON region_selection.region_id = student_regions.region_id 
WHERE region_selection.region_name = YOUR_REGION_NAME 
+0

是工程。但是,我應該如何處理用戶「屬於」多個地區的情況? – David

+0

我編輯了我的答案以包含您的建議。希望這是你的意思。 – Config

+0

謝謝。然而,我想知道如果有可能使用交叉引用表將首先將login_user鏈接到一個或多個區域,那麼該區域將鏈接到城市。否則,我需要創建一個student_region,customer_region,course_region等等,這不是一個真正漂亮的結構。 – David