В PHP-MySQL я использую вложенный оператор выбора следующим образом:
SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))
Каждый SELECT возвращает только одну ячейку в результате. Тем не менее, мне нужен каждый результат этих SELECT, например, мне нужно (глубина 3):
SELECT id FROM oform_field WHERE name='dealer'
Также мне нужно (глубина 2):
SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer')
и мне нужно (глубина 1):
SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))
Есть ли способ присвоить результаты этих заявлений во время только одно исполнение самого большого запроса SQL (обозначается как «глубина 1»)? Другими словами, не выполняя три sql-запроса, я ищу способ присвоения результатов инструкций SELECT на каждой глубине такой переменной, как $ result_1, $ result_2 и т. Д.
Похоже, с этим не справиться, но заранее спасибо …
Ваш запрос эквивалентен:
SELECT e.object_id
FROM form_entry e
INNER JOIN form_entry_values v ON e.id=v.entry_id
INNER JOIN form_field f ON v.field_id = f.id
WHERE v.value='32711178-888'
AND f.name='dealer'
и в этой форме ответ прост: просто добавьте v.entry_id
а также f.id
к списку выражений в SELECT
пункт:
SELECT e.object_id, v.entry_id, f.id
FROM form_entry e
INNER JOIN form_entry_values v ON e.id=v.entry_id
INNER JOIN form_field f ON v.field_id = f.id
WHERE v.value='32711178-888'
AND f.name='dealer'
попробуйте что-то вроде:
SELECT depth1.object_id, depth2.entry_id, depth3.id
FROM form_entry depth1
JOIN form_entry_values depth2 ON depth1.id=depth2.entry_id
JOIN form_field depth3 ON depth3.id=depth2.entry_id
WHERE
depth2.value='32711178-888'
AND depth3.name='dealer';