db_selectを使用して複数の列と結合する方法


8

db_selectを使用して複数の列と結合する方法 何か助けは?

以下は私が探しているサンプルです。

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

回答:


10

次のコードを使用できます。

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

通話SelectQuery ::参加() (のようなワイズSelectQuery :: leftJoin() SelectQuery :: innerJoin() 、およびSelectQuery :: addJoinは()これらのメソッドは戻りませんので)、鎖できないSelectQueryオブジェクトを、ただし、結合に使用される実際のエイリアス。次のコードを実行すると、エラーが発生します。

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

PHPの文字列はオブジェクトではなく、execute()メソッドを定義しません。

コードが正しいSQLクエリを実行していることを確認するには$query、文字列にキャストして出力します。コードから実行されるSQLクエリを取得します。

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

このコードを使用すると、次の出力が得られます。

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

これを試して

$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
使用しているコードは機能しません。オブジェクトをleftJoin()返しませんSelectQuery。コードはcondition()オブジェクトではない何かを求めています。
kiamlaluno

言い換えると、参加は連鎖できません
Mathankumar

@Mathankumarそれは私が探していた言葉です:連鎖可能な呼び出し。:)
kiamlaluno

1
それでも答えは正しくありません。kiamlalunoによる答えを確認してください
Mathankumar

今は大丈夫です。追加の注記、デフォルトでは条件の演算子は等しい(=)ので、それらを指定する必要はありません。
Mathankumar 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.