我有一个表'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/