0

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

你知道任何能够从这种结构中获取这种信息的算法吗?

先感谢您!

4

0 回答 0