该答案做出以下假设:
regions
并且countries
具有相同的结构
countries
完全属于一个region
- 图像被标记为恰好一个
country
或region
使用第一个假设regions
和countries
实际上是相同的,我们将有一个包含此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_id
,locations
我们可以使用该字段查询以获取区域内的所有国家/地区。
如果我们有一个区域,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'
如果您愿意,您当然可以添加一个。
希望我的回答足够清楚。