0

我在夜间课程中学习 php/mysql,我发现很难弄清楚我应该如何在我的数据库中布局和构造我的表,无论我花多长时间做笔记并试图解决它,我都做不到。

我正在尝试创建一个搜索页面,用户可以在其中按国家或地区搜索图片,但显然许多国家/地区将具有相同的地区。

我没有将图片存储在数据库中,只是 url,但我不知道如何将表格连接在一起。

我得到的最远的是一个国家表,带有 id 和 name 列,一个带有 id 和 name 列的区域表,一个连接两者的可连接表,带有 country_id 和 region_id 列,但我不知道如何合并带有图片网址的表格,以便可以按地区或国家/地区搜索它们。

我知道用于构建页面的 php,我只是在寻找有关如何构建数据库部分的帮助。

任何帮助将不胜感激,我花了几个小时试图解决这个问题。

提前致谢。

4

2 回答 2

1

尝试这样的事情:

Regions
-------
region_id
name

Countries
---------
country_id
name
region_id

Pictures
--------
picture_id
url
country_id

如果某些图片只有一个地区而没有一个国家/地区,请添加一个region_idtoPictures并使其与country_id.

要选择,只需使用具有相同名称的列加入,如下所示:

select url
from pictures p
join countries c on p.country_id = c.country_id
join regions r on r.region_id = c.region_id

并添加一个相关where子句:

where c.name = 'UK'

或者

where r.name = 'Europe'

等等。

于 2013-11-13T23:58:28.047 回答
0

该答案做出以下假设:

  • regions并且countries具有相同的结构
  • countries完全属于一个region
  • 图像被标记为恰好一个countryregion

使用第一个假设regionscountries实际上是相同的,我们将有一个包含此CREATE语句的表

CREATE TABLE `locations` (
    `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL DEFAULT '',
    `type` VARCHAR(255) NOT NULL DEFAULT '', -- This will be 'region' or 'country'
    `parent_id` INTEGER NULL DEFAULT NULL
    -- Insert your other fields here...
);

然后我们将有以下images表格

CREATE TABLE `images` (
    `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `file_path` VARCHAR(255) NOT NULL DEFAULT '',
    `location_id` INTEGER NOT NULL DEFAULT 0, -- This will probably be a country.
    -- Your Other fields here...
);

region现在要通过OR搜索图像,country我们只需要传入location_id以获取该特定位置。

这里的重要部分是parent_idlocations我们可以使用该字段查询以获取区域内的所有国家/地区。

如果我们有一个区域,id = 8我们可以执行以下操作:

SELECT i.*
FROM `locations` AS l
INNER JOIN `images` AS i ON i.location_id = l.id
WHERE l.id = 8
OR l.parent_id = 8

然后,这将为我们提供直接附加到区域 8 或属于区域 8 的国家/地区的任何图像。

对于一个国家,我们可以进行完全相同的搜索,但假设countries直接附加到regions我们只会获得附加到该国家的图像,从而为我们提供正确的结果,但AND l.type = 'region'如果您愿意,您当然可以添加一个。

希望我的回答足够清楚。

于 2013-11-13T23:50:58.883 回答