Нужно выбрать данные из связанных таблиц mysql, не могу понять принцип как это сделать, код внутри.

Главные вкладки

Аватар пользователя engenes engenes 12 апреля 2017 в 10:56

После отправки веб-формы нужно проверить есть ли пользователь с таким именем и фамилией в базе. фамилия и имя хранятся в разных таблицах, у которых 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($imyatrue).'</pre>');
        
    };

?>

Лучший ответ

Аватар пользователя xakd xakd 12 апреля 2017 в 11:55
1
   SELECT * FROM {field_data_field_blackfio} fd
 LEFT JOIN {node} n ON fd.entity_id = n.nid
          WHERE fd.field_blackfio_value = :fam AND n.type = :TYPE AND n.title = :title

как-то так

Комментарии

Аватар пользователя xakd xakd 12 апреля 2017 в 11:55
1
   SELECT * FROM {field_data_field_blackfio} fd
 LEFT JOIN {node} n ON fd.entity_id = n.nid
          WHERE fd.field_blackfio_value = :fam AND n.type = :TYPE AND n.title = :title

как-то так

Аватар пользователя engenes engenes 12 апреля 2017 в 12:23

Все заработало, но все равно непонятно))
А можете еще построчно в перевод на человеческий дать?) а то пытаюсь прочитать, но не получается)

а если 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 материалов это разные вещи)

Аватар пользователя xakd xakd 12 апреля 2017 в 18:20
 LEFT JOIN {node} n ON fd.entity_id = n.nid
LEFT JOIN {users} u ON xxx = u.uid

Вместо XXX -чё вы там собираетесь с uid сравнивать.
А вообще почитайте уже учебник по mySQL - или просто руководство в инете, в гугле же ваc не забанили.