Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL CHỌN ĐÂU TRONG DANH SÁCH và KHÔNG TRONG DANH SÁCH trong cùng một SQL

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi khi cài đặt đá quý mysql2 qua Bundler

  2. Làm cách nào để thêm 1 giờ vào currrent_timestamp trong mysql, giá trị mặc định là giá trị?

  3. Sự khác biệt về hiệu suất trong triển khai phân chia quan hệ MySQL (IN VÀ thay vì IN HOẶC) là gì?

  4. COUNT (*) có luôn trả về một kết quả không?

  5. Cách lưu trữ IP trong mySQL