在二维数组中查找路径

时间:2014-01-29 13:21:43

标签: php mysql sql mapping search-path

我有没有约束定义的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)
      }
    }
 ...
}

现在我想知道如何在这个数据库中找到从一个表到另一个表的路径。

让我举个例子。假设我们的数据库中有以下表格:

  • states(id_state,name)
  • cities(id_city,id_state,name)
  • 街道(id_street,id_city,名称)
  • 房屋(id_house,id_street,颜色,数字)
  • 人(id_house,姓名)

现在让我们说每次我想找到一些属性的房子(例如居住在芝加哥的每个蓝屋)。为此,我需要生成SQL命令。

SQL的SELECT部分​​很简单(例如SELECT houses.id)。 SQL的一部分也非常简单(例如WHERE cities.name = 'Chicago' AND house.color = 'blue')。 问题在于“连接”SQL的JOIN部分中的表

我只需要搜索这个多维关系数组,找到一个连接包含SQL的SQL和SELECT部分​​的WHERE部分条件的所有表的路径。

在这种情况下,我希望得到这个:

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'

您是否知道任何能够从此结构中获取此类信息的算法?

提前谢谢!

0 个答案:

没有答案