Come eseguire l'unione con più colonne usando db_select?


8

Come eseguire l'unione con più colonne usando db_select? Qualsiasi aiuto?

Qui sotto è il campione, che sto cercando.

SELECT * FROM digitaliq_flds_by_node a
JOIN digitaliq_fld_category b ON
  a.fld_id = b.fld_id AND
  a.fld_collection_id = b.fld_collection_id AND
  a.fld_group_name = b.fld_group_name

Risposte:


10

Puoi usare il seguente codice.

$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');

$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');

$terms = $query->execute();

Le chiamate a SelectQuery :: join () (simile a SelectQuery :: leftJoin () , SelectQuery :: innerJoin () e SelectQuery :: addJoin () ) non sono in grado di eseguire la catena perché tali metodi non restituiscono un SelectQueryoggetto, ma l'alias effettivo utilizzato per il join. Se si esegue il seguente codice, si otterrebbe un errore.

$query = db_select('digitaliq_flds_by_node', 'a')
  ->fields('a')
  ->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name')
  ->execute();

Le stringhe in PHP non sono oggetti e non definiscono il execute()metodo.

Per verificare che il codice stia eseguendo la query SQL corretta, eseguire il cast $querysu una stringa e stamparlo. Otterrai la query SQL che verrebbe eseguita dal tuo codice.

$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');
$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');
print $query;

Con questo codice, ottengo il seguente output.

SELECT a.*
FROM 
{digitaliq_flds_by_node} a
INNER JOIN {digitaliq_fld_category} b ON a.fld_id = b.fld_id AND a.fld_collection_id = b.fld_collection_id AND a.fld_group_name = b.fld_group_name

4

Prova questo

$query = db_select('digitaliq_flds_by_node', 'a');
$query->join('digitaliq_fld_category', 'b', 'a.fld_id = b.fld_id');
$query->condition('a.fld_collection_id', 'b.fld_collection_id' '=');
$query->condition('a.fld_group_name', 'b.fld_group_name', '=');
$query->fields('a');
$query->execute();

2
Il codice che stai utilizzando non funziona: leftJoin()non restituisce un SelectQueryoggetto. Il codice richiede condition()qualcosa che non sia un oggetto.
kiamlaluno

In altre parole, l'adesione non è in grado di
eseguire la

@Mathankumar Questa è la parola che cercavo: chiamate in grado di eseguire la catena. :)
kiamlaluno

1
Tuttavia la risposta non è corretta. controlla la risposta di kiamlaluno
Mathankumar il

Adesso va bene. Nota aggiuntiva, per impostazione predefinita l'operatore per condizione è uguale a (=), quindi non è necessario specificarli.
Mathankumar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.