0

我有两个表,地点和用户

-- Places Table: --
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   |     | NULL    |                |
| type       | varchar(15)  | NO   |     | NULL    |                |
| parent_id  | int(11)      | YES  | MUL | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

-- Users Table: --
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   |     | NULL    |                |
| city_id    | int(11)      | YES  | MUL | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

我有三个模型都使用 Places 表,并且都是 Place 模型的子类。places.type 列包含子类的类名,所以我知道它属于哪个模型。

国家,州,城市。

所以,继承结构如下:

国家 < 地点 州 < 地点 城市 < 地点

关系如下:

国家有很多州 州有很多城市 城市有很多用户

我想通过州和城市加入来返回给定国家/地区内的所有用户,但我无法让 SQL 查询为其工作。

那里有任何 SQL 专家可以为我指明正确的方向吗?

4

1 回答 1

0

这个怎么样?你需要国家的身份证。

SELECT st.name,  
       city.name,  
       u.name  

FROM   users u,  
       places city,  
       places st  

WHERE  u.city_id = city.id  
AND    city.type = 'city'  
AND    st.type = 'state'  
AND    st.id = city.parent_id  
AND    st.parent_id = @country_id  
于 2013-10-14T03:42:35.213 回答