После отправки веб-формы нужно проверить есть ли пользователь с таким именем и фамилией в базе. фамилия и имя хранятся в разных таблицах, у которых entity_id = nid.
в коде ниже у меня создаются два массива $fams и $names
, и далее я должен перебрать значения одного по значениям другого.
Но допустим у меня меня в базе 10 миллионов пользователей (или каких то других значений, не принципиально) не отличающимися разнообразием фамилий, в этом случае перебор массива будет давать дополнительную нагрузку.
можно ли как то собрать в один массив пользователей из двух таблиц у которых entity_id = nid.
Разбирался со связанным запросами, но так ничего и не получилось.
Я уверен что это все те же 4 строчки кода, но никакого результата получить не смог.
Помогите с кодом
<?php
if($form_id=="webform-client-form-310"){
$fam=$data['components']['familiya']['value'][0];
$imya=$data['components']['imya']['value'][0];
$fams = db_query("
SELECT entity_id FROM {field_data_field_blackfio}
WHERE field_blackfio_value = :fam
", array(':fam' => $fam))->fetchAll();
$names = db_query("
SELECT nid FROM {node}
WHERE type = :type AND title = :title
", array(':type' => 'blacklist', ':title' => $imya))->fetchAll();
drupal_set_message('<pre>'.print_r($imya, true).'</pre>');
};
?>
Комментарии
LEFT JOIN {node} n ON fd.entity_id = n.nid
WHERE fd.field_blackfio_value = :fam AND n.type = :TYPE AND n.title = :title
как-то так
Все заработало, но все равно непонятно))
А можете еще построчно в перевод на человеческий дать?) а то пытаюсь прочитать, но не получается)
а если 3 таблицы, то примерно так выглядеть строчка будет?
SELECT * FROM {field_data_field_blackfio} fd LEFT JOIN {node} n LEFT JOIN {users} u fd.entity_id = n.nid=u.uid
не обращайте внимание на названия таблиц, это для примера, я понимаю что id пользователей и id материалов это разные вещи)
LEFT JOIN {users} u ON xxx = u.uid
Вместо XXX -чё вы там собираетесь с uid сравнивать.
А вообще почитайте уже учебник по mySQL - или просто руководство в инете, в гугле же ваc не забанили.