我有没有约束定义的 MySQL 数据库,并且我在 PHP 中还有一个多维数组,其中包含有关此数据库中表关系的信息。数组采用这种格式(仅作为示例):
array(20){
ps_attribute_lang => array(2) {
id_attribute => array(2) {
totable => "ps_attribute" (12)
tocolumn => "id_attribute" (12)
}
id_lang => array(2) {
totable => "ps_lang" (7)
tocolumn => "id_lang" (7)
}
}
ps_cart => array(4) {
id_lang => array(2) {
totable => "ps_lang" (7)
tocolumn => "id_lang" (7)
}
id_address_delivery => array(2) {
totable => "ps_address" (10)
tocolumn => "id_address" (10)
}
id_address_invoice => array(2) {
totable => "ps_address" (10)
tocolumn => "id_address" (10)
}
id_customer => array(2) {
totable => "ps_customer" (11)
tocolumn => "id_customer" (11)
}
}
ps_cart_product => array(1) {
id_product => array(2) {
totable => "ps_product" (10)
tocolumn => "id_product" (10)
}
}
...
}
现在我想知道如何在这个数据库中找到从一个表到另一个表的路径。
让我举个例子。假设我们的数据库中有以下表格:
- 状态(id_state,名称)
- 城市(id_city,id_state,名称)
- 街道(id_street,id_city,名称)
- 房屋(id_house,id_street,颜色,编号)
- 人(id_house,姓名)
现在假设每次我想找到有一些属性的房子(例如芝加哥的每个蓝色房子)。为此,我需要生成 SQL 命令。¨
SQL 的 SELECT 部分很简单(例如SELECT houses.id
)。SQL 的 WHERE 部分也很简单(例如WHERE cities.name = 'Chicago' AND house.color = 'blue'
)。问题在于 SQL 的 JOIN 部分中的“连接”表。
我只需要搜索这个多维关系数组并找到一条连接所有表的路径,这些表包含来自 SQL 的 WHERE 部分和 SQL 的 SELECT 部分的条件。
在这种情况下,我想得到这个:
SELECT house.id
FROM house
JOIN street ON(house.id_street = street.id)
JOIN city ON(street.id_city = city.id)
WHERE house.color = 'blue' AND city.name = 'chicago'
你知道任何能够从这种结构中获取这种信息的算法吗?
先感谢您!