Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL中的表布局_Php_Mysql_Sql - Fatal编程技术网

Php MySQL中的表布局

Php MySQL中的表布局,php,mysql,sql,Php,Mysql,Sql,我在夜间课程中学习php/mysql,我发现很难确定我应该如何在数据库中布局和构造我的表,无论我花多长时间做笔记并试图解决这个问题,我都做不到 我试图创建一个搜索页面,用户可以按国家或地区搜索图片,但显然很多国家都有相同的地区 我没有将图片存储在数据库中,只是存储了url,但我无法确定如何将表连接在一起 我得到的最远的是一个包含id和name列的countries表,一个包含id和name列的region表,一个连接这两个列的jointable表,包含country\u id和region\u

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

我试图创建一个搜索页面,用户可以按国家或地区搜索图片,但显然很多国家都有相同的地区

我没有将图片存储在数据库中,只是存储了url,但我无法确定如何将表连接在一起

我得到的最远的是一个包含id和name列的countries表,一个包含id和name列的region表,一个连接这两个列的jointable表,包含country\u id和region\u id列,但我不知道如何将该表与图片URL合并,以便可以按区域或按国家搜索它们

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

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


提前感谢。

此答案做出以下假设:

  • 地区
    国家
    具有相同的结构
  • 国家
    只属于一个
    地区
  • 图像仅标记到一个
    国家
    地区
使用第一个假设,即
地区
国家
实际上是相同的,我们将有一个包含
创建
语句的表

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...
);
然后我们就有了
图像的表格
,如下所示

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...
);
现在要按
地区
国家
搜索图像,我们只需输入
位置\u id
即可获得该特定位置

这里的重要部分是
父id
,对于
位置
,我们可以使用此字段查询以获得一个区域内的所有国家/地区

如果我们有一个
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区域的国家的图像

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


希望我的答案足够清楚。

试试这样:

Regions
-------
region_id
name

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

Pictures
--------
picture_id
url
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
如果某些图片只有一个地区而没有国家,请将
地区id
添加到
图片
中,并将其与
国家id一起设置为空

要进行选择,只需使用名称相同的列进行连接,如下所示:

Regions
-------
region_id
name

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

Pictures
--------
picture_id
url
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'


依此类推。

一个国家可以居住在多个地区吗?嗨,迈克,没有,但地区包含多个国家。必须使用一个国家表,并包含一个地区(文本)列。国家名称/ID将是唯一的,但不同国家之间的区域可能相同。图片是否始终链接到一个国家?许多国家?国家和地区?仅限地区?图片和国家/地区之间可能有什么联系?如果他需要返回区域,即使没有图片,这也会给他带来问题-内部连接将阻止这一点。在这种情况下,我建议使用一个右连接,也许可以从像count(I.id)这样的图像中对行进行计数,作为img_count,以便稍后检查是否返回了任何内容:)我认为在模式中引入树层次结构是个坏主意。一个地区和一个国家可能代表着非常不同的现实世界。@denlau如果您需要获取位置详细信息,即使没有标记的图像,您也是绝对正确的,但这是一个非常简单的更改。:)@可能是MikeBrant,但我以前构建过类似的系统,从来没有出现过这个问题,但它被概括为解决方案中的一个假设。你确定“连接”是允许的吗?不应该给它一个类型吗?e、 内、左、右?如果不指定其他内容,则表示内。我通常不会自己写,但你可能会有不同的风格。