Làm cách nào để thực hiện nối với nhiều cột bằng db_select?


8

Làm cách nào để thực hiện nối với nhiều cột bằng db_select? Có ai giúp đỡ không?

Dưới đây là mẫu mà tôi đang tìm kiếm.

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

Câu trả lời:


10

Bạn có thể sử dụng mã sau đây.

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

Các lệnh gọi tới SelectQuery :: tham gia () (như khôn ngoan ChọnQuery :: leftJoin () , SelectQuery :: InternalJoin ()SelectQuery :: addJoin () ) không thể có chuỗi vì các phương thức đó không trả về một SelectQueryđối tượng, nhưng bí danh thực tế được sử dụng để tham gia. Nếu bạn thực thi đoạn mã sau, bạn sẽ gặp lỗi.

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

Các chuỗi trong PHP không phải là các đối tượng và chúng không định nghĩa execute()phương thức.

Để xác minh mã đang thực hiện đúng truy vấn SQL, truyền $queryvào một chuỗi và in nó. Bạn sẽ nhận được truy vấn SQL sẽ được thực thi từ mã của bạn.

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

Với mã này, tôi nhận được đầu ra sau.

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

Thử cái này

$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
Mã bạn đang sử dụng không hoạt động: leftJoin()không trả về một SelectQueryđối tượng. Mã này đang kêu gọi condition()một cái gì đó không phải là một đối tượng.
kiamlaluno

Nói cách khác, tham gia không phải là chuỗi có thể
Mathankumar

@Mathankumar Đó là từ tôi đang tìm kiếm: các cuộc gọi có thể xâu chuỗi. :)
kiamlaluno

1
Vẫn là câu trả lời không chính xác. kiểm tra câu trả lời của kiamlaluno
Mathankumar

Bây giờ nó ổn. Lưu ý bổ sung, theo mặc định toán tử cho điều kiện bằng (=), do đó không cần thiết phải chỉ định chúng.
Mathankumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.