【发布时间】:2019-11-08 20:22:14
【问题描述】:
我有一个属性数据库,我目前正在设计一个查询属性的其他特征。在这种情况下,有问题的两个表是:
这是第一个特性表,基本上是我存储每个特性的元数据的地方。
这是 CharacterPerProperty 数据库,我在其中存储特定特征的关系和最终值。
所以基本上我想要做的是计算所有唯一的id_propiedad (property_id),以便我可以显示我有多少具有该特定特征的可用。查询如下
SELECT
COUNT(DISTINCT(CaracteristicasPorPropiedad.id_propiedad)) AS disponibles
FROM
CaracteristicasPorPropiedad
WHERE
CaracteristicasPorPropiedad.id_caracteristica = 1
AND
CaracteristicasPorPropiedad.valor = 3
所以基本上输出是这样的:
| disponibles |
|=============|
| 264 |
到目前为止,一切都按预期工作,但我还可以包含另一个参数,假设在前面的示例中我包含了 Recámaras(卧室),但我还想包含 Baños(浴室)。我试过了
SELECT
COUNT(DISTINCT(CaracteristicasPorPropiedad.id_propiedad))
FROM
CaracteristicasPorPropiedad
WHERE
(CaracteristicasPorPropiedad.id_caracteristica = 1 AND CaracteristicasPorPropiedad.valor = 3)
AND
(CaracteristicasPorPropiedad.id_caracteristica = 2 AND CaracteristicasPorPropiedad.valor = 2.5)
问题是这个查询返回 0。
如果我将 AND 切换为 OR,它会返回 282 个结果。我基本上需要两者的结合。我有点坚持这一点。混合多个级别的查询可能是什么?它可以与该特性的所有 10 个可用维度一起使用。
【问题讨论】:
-
用您正在使用的数据库标记我们的问题。
-
完成。我添加了mysql标签。
-
CaracteristicasPorPropiedad.id_caracteristica = 1 AND CaracteristicasPorPropiedad.id_caracteristica = 2。这怎么可能是真的???它将始终返回 false,因此不会返回任何行,因此count()将始终为 0。 -
@Eric 我知道,关于如何在这两种情况下进行计数的任何建议?
-
你的逻辑是什么?你想得到什么?