cláusulas condicionais do drupal sql para várias tabelas?

Tenho a consulta abaixo modificada para o módulo de pesquisa de perguntas frequentes que funciona no Drupal 7, que pesquisa em duas tabelas: 1) título 2) corpo, mas não consegue incluir mais um.

$term = strip_tags(drupal_substr($_POST['keyword'], 0, 100));

$query = "SELECT DISTINCT fq.title, fq.nid
 FROM {node} AS fq, {field_data_body} AS f
 WHERE fq.title LIKE :term
 OR fq.type LIKE :term
 OR f.body_value LIKE :term
 AND f.entity_id = fq.nid";

$result = db_query($query, array(':term' => '%%' . $term . '%%',':term' => '%%' . $term . '%%',':term' => '%%' . $term . '%%'));

Gostaria de adicionar mais um para incluir o campo de perguntas detalhadas na pesquisa, mas acho que a vinculação para nid é o problema? Tentei colocar os dois em uma cláusula, mas parece estar errado. Ajuda por favor :)

AND (fd.entity_id = fq.nid OU fb.entity_id = fq.nid) ";

$term = strip_tags(drupal_substr($_POST['keyword'], 0, 100));
 $query = "SELECT DISTINCT fq.title, fq.nid
    FROM {node} AS fq, {field_data_field_detailed_question} AS fd, {field_data_body} AS fb
    WHERE fq.title LIKE :term
    OR fd.field_detailed_question_value LIKE :term
    OR fb.body_value LIKE :term
    AND (fd.entity_id = fq.nid OR fb.entity_id = fq.nid)";
 $result = db_query($query, array(':term' => '%%' . $term . '%%',':term' => '%%' . $term . '%%',':term' => '%%' . $term . '%%'));

 $string = "";
 while ($row = $result->fetchObject()) {
    $string .= "<a href='/" . drupal_get_path_alias('node/' . $row->nid) . "'>" . $row->title . "</a>"; }
echo $string;

ATUALIZAR: Agradeço a Syscall, que me ajudou a fazer sua abordagem funcionar (consulte o bate-papo).

Também consegui remover o espaço em branco vazio (adicionando uma nova variável e usando o array_filter>. Acho que o problema foi dividir o espaço em branco e aparar ao mesmo tempo em que o array_map ainda criou cadeias de caracteres vazias.) E adicionar uma condição para excluir nós não publicados por db_and ( ) referenciando n.status = 1.

    $terms = explode(' ', $term); // split using ' '
    $terms = array_map('trim', $terms); // remove unwanted spaces
     $termsfiltered = array_filter($terms);
    $or = db_or();
        foreach ($termsfiltered as $term) {
           $or->condition('fd.field_detailed_question_value', '%'.db_like($term).'%', 'LIKE');
            $or->condition('fb.body_value','%'.db_like($term).'%' , 'LIKE');
            $or->condition('n.title','%'.db_like($term).'%' , 'LIKE');
        }
        $and = db_and()->condition('n.status','1' , 'LIKE');

$query = db_select('node', 'n');
$query->fields('n');
$query->leftJoin('field_data_body' , 'fb', 'fb.entity_id=n.nid');
$query->leftJoin('field_data_field_detailed_question' ,'fd', 'fd.entity_id=n.nid');
$query->condition($or);
$query->condition($and);
$stmt = $query->execute(); // execute the query (returns the "statement" to fetch).

p.s. inserindovar_dump ($ variaveldump); foi realmente útil ao alterar o código e visualizar os efeitos das matrizes para resolver problemas.

questionAnswers(2)

yourAnswerToTheQuestion