我有一个表'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永远不会有value_data为2013。

或类似的子查询:

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行。

这样的查询可能吗?

最佳答案

您的最后一次尝试几乎是正确的,只是您得到了子查询返回的行数超过了1行

取代这个

     && model_values.value_data = (


通过

 && model_values.value_data IN (


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

关于mysql - 如何执行受同一表中值限制的mysql查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17900779/

10-11 03:06
查看更多