MySQL表。我应该使用交叉引用表吗?

时间:2012-05-23 17:29:22

标签: php mysql foreign-keys

我根据他们所属的城市在我的网站上呈现MySQL的数据输出。因此,我的两个表名为login_userscity_selection。所有表都有一个名为city_id的列。

当用户登录我的网站时,我会询问数据库设置了哪个city_id,然后创建$_SESSION['city_id']

然后我能够将带有WHERE - 子句的MySQL查询编写到$_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网站,所以请耐心等待我!

1 个答案:

答案 0 :(得分:0)

如果每个城市只属于一个地区,则可以使用列region_selection创建region_id | region_name表。然后,您在region_id表格中添加city_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

如果用户属于多个区域,您可以执行以下操作:创建表region_selection,如上所示。然后创建一个包含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