1

我有一个看起来像这样的表'model_values':

+----+------------+-------------+----------------+------------+
| id | value_post | value_model | value_property | value_data |
+----+------------+-------------+----------------+------------+
|  1 |          1 |          39 |              1 | ValueA     |
|  2 |          1 |          39 |              2 | Value1     |
|  3 |          1 |          39 |              3 | 2013       |
|  4 |          2 |          39 |              1 | ValueA     |
|  5 |          2 |          39 |              2 | Value2     |
|  6 |          2 |          39 |              3 | 2012       |
|  7 |          3 |          39 |              1 | ValueB     |
|  8 |          3 |          39 |              2 | Value1     |
|  9 |          3 |          39 |              3 | 2013       |
| 10 |          4 |          30 |              1 | ValueA     |
| 11 |          4 |          30 |              2 | Value2     |
| 12 |          4 |          30 |              3 | 2013       |
+----+------------+-------------+----------------+------------+

我正在尝试根据以下查询创建一组下拉列表,显示 value_property 的 1 和 2 的 value_data:

SELECT *
FROM model_values
INNER JOIN models
ON model_values.value_model = models.id
INNER JOIN properties
ON model_values.value_property = properties.id
WHERE model_values.value_property = {$safe_property} && models.id = {$safe_model_id}
GROUP BY model_values.value_data

但我希望下拉菜单也受到 value_property 3 (即年份)的限制。因此,用户将首先选择 2013 年,然后通过以下选项获得两个下拉菜单可供选择:

Select 1: ValueA/ValueB
Select 2: Value1

或者,如果他们首先选择 2012 年,他们会看到:

Select 1: ValueA
Select 2: Value2

我试图提出如下查询:

WHERE model_values.value_property = 1 && models.id = 39 && model_values.value_data = 2013 

但显然这不起作用,因为 value_property 1 永远不会有 2013 年的 value_data。

或子查询,如:

WHERE model_values.value_property = 1 && models.id = 39 && model_values.value_data = (
    SELECT model_values.value_data
    FROM model_values
    WHERE model_values.value_data = 2013
)

但这会返回超过 1 行。

这样的查询可能吗?

4

2 回答 2

0

以下查询返回一个中间结果,这引出了两个问题:

1 我们如何知道哪个结果属于哪一年?

2 假设我们想要,选择value_data = 2的标准是什么?id 5id 8

  SELECT * 
    FROM model_values 
   WHERE value_property = 2 
     AND value_model = 39;

ID VALUE_POST VALUE_MODEL VALUE_PROPERTY VALUE_DATA
2  1          39          2              Value1    
5  2          39          2              Value2 
8  3          39          2              Value2
于 2013-07-27T20:51:20.090 回答
0

您的最后一次尝试几乎是正确的,只是您的子查询返回多于 1 行

替换这个

     && model_values.value_data = (

经过

 && model_values.value_data IN (

我看不出它是否正确,因为你没有提供模型表

于 2013-07-27T20:53:36.207 回答