Рейтинг:4

Возможно ли иметь вложенный SELECT в предложении WHERE с использованием динамических запросов?

флаг cn

Мне нужно выполнить этот SQL-запрос, используя динамические запросы.

ГДЕ (node_field_data.status = 1) 
И (node__field_document_places.entity_id IN (ВЫБЕРИТЕ entity_id ИЗ node__field_document_places, где field_document_places_target_id = 51673)) 

Это код, который я использую.

$connection = База данных::getConnection();
$query = $connection->select('node_field_data', 'node_field_data');

$запрос->условие('node_field_data.status',1);
$query->condition('node__field_document_places.entity_id',[ -- Можно ли как-нибудь сделать это здесь? -- ], "IN");

Технически я мог бы запустить отдельный запрос и поместить идентификаторы в массив. Но я надеялся избежать выполнения двух разных запросов.

Есть ли способ сделать это с помощью динамических запросов?

Рейтинг:4
флаг cn

Да, это очень возможно, см. Теперь к условиям запроса можно добавлять подзапросы. изменить запись для получения полной информации.

Канонический пример очень похож на ваш и должен продемонстрировать, как реорганизовать ваш код:

// Создать подзапрос, который является обычным объектом запроса.
$subquery = db_select('test', 't2');
$subquery->addExpression('AVG(t2.age)');

// Создаем еще один запрос, который добавляет условие с помощью подзапроса.
$select = db_select('тест', 'т');
$select->addField('т', 'имя');
$select->условие('t.age', $subquery, '<');

Не забудьте заменить устаревшее db_select() с $соединение->выбрать().

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.