it-swarm.com.de

Wie führe ich mit db_select einen Join mit mehreren Spalten durch?

Wie führe ich mit db_select einen Join mit mehreren Spalten durch? Irgendeine Hilfe?

Hier unten ist das Beispiel, das ich suche.

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
8
Kiran Kumar

Sie können den folgenden Code verwenden.

$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();

Aufrufe von SelectQuery :: join () (ähnlich SelectQuery :: leftJoin () , SelectQuery :: innerJoin () und - SelectQuery :: addJoin () ) sind nicht verkettbar, da diese Methoden kein SelectQuery -Objekt zurückgeben, sondern den tatsächlichen Alias, der für den Join verwendet wird. Wenn Sie den folgenden Code ausführen, wird eine Fehlermeldung angezeigt.

$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();

Zeichenfolgen in PHP sind keine Objekte und definieren nicht die Methode execute().

Um zu überprüfen, ob der Code die richtige SQL-Abfrage ausführt, setzen Sie $query In eine Zeichenfolge und drucken Sie sie aus. Sie erhalten die SQL-Abfrage, die von Ihrem Code ausgeführt wird.

$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;

Mit diesem Code erhalte ich die folgende Ausgabe.

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
10
kiamlaluno

Versuche dies

$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();
4
Sathiya