У меня есть таблица «model_values», который выглядит следующим образом:Как выполнить запрос mysql, ограниченный значением в той же таблице?
+----+------------+-------------+----------------+------------+
| 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_data для value_property-х 1 и 2, основываясь на следующем запросе:
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
Но я хочу, чтобы выпадающие списки также ограничивались значением_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 строку.
Возможно ли такое требование?
Как выглядит желаемый результат? - и предоставите sqlfiddle для вышеуказанного – Strawberry
Вот ссылка на sqlfiddle: http://sqlfiddle.com/#!2/d3f3b6/2 Результат будет выглядеть так, как в ссылке, но запрос будет включать ограничение это до 2012 года, поэтому «Value1» не должен отображаться. Я только достаточно знаю о mysql, чтобы попасть в неприятности на этом этапе. Я предполагаю, что если я не могу заставить этот запрос работать, мне придется вернуться и посмотреть, как я перебираю результаты в своем php. – ryansommers
То, что я собираю, это невозможно с помощью только mysql. Я скорректировал свой PHP, чтобы пройти по другому, чтобы получить результат, который я искал. Не уверен, закрываю или удаляю этот вопрос сейчас? – ryansommers