Php Mysql根据一个值与多个表进行内部联接

Php Mysql根据一个值与多个表进行内部联接,php,mysql,Php,Mysql,我必须创建一个出售的真实状态数据库。问题是房地产的种类:如果我有房子,我有一种描述,但如果它只是一块土地,描述不需要包括浴室的数量,只需要面积、前幅等等 所以我做了一个关于元素(imoveis)的通用数据表,其中包括地址、价格等。。然后我创建了元素类别(imoveis_categs)。我做了5个类别,对于每个类别,都会有一个表(例如:imoveis_descr2),其中包含该类型的特定功能 要输入数据很容易,但要列出我的数据,我需要执行查询选择以根据一些过滤器查找这些元素。在PHP中很容易解决,

我必须创建一个出售的真实状态数据库。问题是房地产的种类:如果我有房子,我有一种描述,但如果它只是一块土地,描述不需要包括浴室的数量,只需要面积、前幅等等

所以我做了一个关于元素(imoveis)的通用数据表,其中包括地址、价格等。。然后我创建了元素类别(imoveis_categs)。我做了5个类别,对于每个类别,都会有一个表(例如:imoveis_descr2),其中包含该类型的特定功能

要输入数据很容易,但要列出我的数据,我需要执行查询选择以根据一些过滤器查找这些元素。在PHP中很容易解决,但我想知道大量数据和用户请求的性能。我想,最好用SQL命令来解决这个问题。但是mySQL不是我的领域,我想象这样的事情开始

 SELECT * FROM imoveis INNER JOIN imoveis_descr(imoveis.categ) ...
imoveis的“类别”字段指向右侧的描述表。有可能这样做吗?还有其他更合适或更有效的方法吗

编辑:我试着用一个例子来说明。。。 编辑2:我纠正了这个例子,“房间”一栏将是相同的。该领域不是排他性的,公寓和房屋类别都有一定数量的房间

Table imoveis
id  categ   title            price       address ...
1   2       The House        $ 1000000   Somestreet 77
2   1       An Appartment    $ 500000    Somewhere 11
3   4       A Land           $ 250000    Nowhere 33

Table imoveis_descr1
idImovel    rooms   area    floor   ...
2           2       70      5

Table imoveis_descr2
idImovel    rooms fieldArea   constrArea ...
1           3      120        80

Table imoveis_descr4
idImovel    area    width   height ...
3           2640    22      120

Result
id   categ    title       price     address   rooms fieldArea  constrArea    area    floor        area   width  height
1      2     The House    $ 1000000 Somestreet 77   3   120 80  null    null    null    null    null
2   1   An Appartment   $ 500000    Somewhere 11    2   null    null    70  5   null    null    null
3   4   A Land  $ 250000    Nowhere 33  null    null    null    null    null    2640    22  120

您的一些字段名称在结果中重复(例如“rooms”),将这些字段与COALESCE合并(因为它们看起来互斥)不是更好吗

由于所引用的表是互斥的,因此使用
内部联接将永远无法获得所需的结果,您将需要
外部联接

SELECT
      i.id,
      i.categ,
      i.title,
      i.price,
      i.address,
      COALESCE(i1.rooms, i2.rooms) AS rooms,
      i2.fieldArea,
      i2.constrArea
      COALESCE(i1.area, i3.area, ...) AS area,
      ...
FROM  imoveis AS i
      LEFT OUTER JOIN imoveis_descr1 AS i1 ON i1.idImovel = i.id
      LEFT OUTER JOIN imoveis_descr2 AS i2 ON i2.idImovel = i.id
      LEFT OUTER JOIN imoveis_descr3 AS i3 ON i3.idImovel = i.id
      ...

更新您的问题添加一个适当的数据样本和预期结果。我会尝试,但它是不规则的大表格,不容易放在文本区域中…在重复的字段中没有问题,例如房间,将意味着公寓或房屋也一样。我现在可以看出我在示例中做错了。但您确实指出了这个问题,为所有描述表创建内部联接,而不是“构建”正确的名称。。。