tạo một câu lệnh kết hợp bên ngoài để bạn nhận được:
SELECT ids.id, table_live.moderation_date
FROM (select 1 id union all select 2 union all ....) ids
LEFT JOIN table_live
ON ids.id = table_live.id
trong đó id là một truy vấn con liệt kê tất cả các giá trị, giống như sau:
$ids = '1,2,3,4,5'
$subquery = 'select '.str_replace(',', ' id union all select ', $ids).''
$sql = "SELECT ids.id, table_live.moderation_date
FROM ($subquery) ids
LEFT JOIN table_live
ON ids.id = table_live.id"
nhớ chọn ids.id
, không phải table_live.id
. Bằng cách đó, id sẽ luôn hiển thị và chỉ ngày moderation_date nếu hàng tương ứng tồn tại trong table_live.
Một cách tiếp cận khác sẽ là giữ nguyên truy vấn như bạn đã có, lưu trữ kết quả trong một mảng, sau đó hợp nhất các mảng trong php để bạn giữ lại tất cả các khóa và chỉ điền vào các giá trị mà khóa khớp trong cả hai mảng.
Tôi thực sự không chắc bạn đang sử dụng loại thư viện db nào vì vậy tôi không biết cách lấy một mảng của tập kết quả, nhưng giả sử bạn đã lưu trữ các hàng trong một mảng php, bằng cách sử dụng biểu diễn chuỗi của id như và ngày dưới dạng giá trị, thì mã này sẽ thực hiện thủ thuật:
$items = array(
'1' => NULL
, '2' => NULL
, ...
);
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);
xem: http://php.net/manual/en/ Chức năng.array -merge.php