Bagaimana cara bergabung dengan banyak kolom menggunakan db_select?


8

Bagaimana cara bergabung dengan banyak kolom menggunakan db_select? Ada bantuan?

Di bawah ini adalah contoh, yang saya cari.

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

Jawaban:


10

Anda dapat menggunakan kode berikut.

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

Panggilan ke SelectQuery :: join () (seperti SelectQuery :: leftJoin () , SelectQuery :: innerJoin () , dan SelectQuery :: addJoin () ) tidak dapat terhubung karena metode tersebut tidak mengembalikan SelectQueryobjek, tetapi alias yang sebenarnya digunakan untuk bergabung. Jika Anda menjalankan kode berikut, Anda akan mendapatkan kesalahan.

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

String di PHP bukan objek, dan mereka tidak mendefinisikan execute()metode.

Untuk memverifikasi kode ini menjalankan query SQL yang tepat, dilemparkan $queryke string, dan cetak. Anda akan mendapatkan kueri SQL yang akan dieksekusi dari kode Anda.

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

Dengan kode ini, saya mendapatkan output berikut.

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

Coba ini

$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
Kode yang Anda gunakan tidak berfungsi: leftJoin()tidak mengembalikan SelectQueryobjek. Kode ini memanggil condition()sesuatu yang bukan objek.
kiamlaluno

Dengan kata lain bergabung tidak bisa rantai
Mathankumar

@Mathankumar Itulah kata yang saya cari: panggilan berantai. :)
kiamlaluno

1
Tetap saja jawabannya salah. periksa jawabannya oleh kiamlaluno
Mathankumar

Sekarang tidak apa-apa. Catatan tambahan, secara default operator untuk kondisi sama dengan (=), jadi tidak perlu menentukannya.
Mathankumar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.