您建议如何存储和检索数据。我正在使用 MySql 和 PHP。查找表会是理想的吗?
要存储国家、州和城市,您应该使用规范化的数据库模式。国家有州。州有城市。您需要连接表。
或者我可以将所有位置 id kand 以 json 格式存储在文本类型列中吗?
不,那不是正常的形式。而且会产生很多问题。您不能轻松地执行 CRUD 操作。
数据库架构
create table countires(name varchar(100) primary key);
create table sates(name varchar(100) primary key, country varchar(100), foreign key `country` references `countries`(`name`));
create table cities(name varchar(100) primary key, state varchar(100), foreign key `state` references `states`(`name`));
现在您可以对这些表运行任何不同类型的查询。假设用户选择了城市 ( city1
, city2
)、国家cntry1
和州stt2
。
查询
查找用户选择的所有城市。
SELECT ct.name
FROM cities AS ct
JOIN states AS st
ON ( st.name = city.state )
JOIN countries AS cn
ON ( cn.name = st.country )
WHERE ct.name IN ( 'city1', 'city2' )
OR cn.name = 'cntry1'
OR st.name = 'stt2';
查找用户选择的所有状态。
SELECT st.name
FROM states AS st
JOIN countries AS cn
ON ( cn.name = st.country )
WHERE OR cn.name = 'cntry1'
OR st.name = 'stt2';
更新 1
如何维护与用户的关系?
您需要连接表。只需创建其中的 3 个。
create table users(name varchar(100) primary key);
CREATE TABLE user_countries
(
user VARCHAR(100),
country VARCHAR(100),
PRIMARY KEY (`user`, `country`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`counry`) REFERENCES `countries`(`name`)
);
CREATE TABLE user_states
(
user VARCHAR(100),
state VARCHAR(100),
PRIMARY KEY (`user`, `state`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`state`) REFERENCES `states`(`name`)
);
CREATE TABLE user_cities
(
user VARCHAR(100),
city VARCHAR(100),
PRIMARY KEY (`user`, `city`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`city`) REFERENCES `cities`(`name`)
);