sql >> Base de Datos >  >> RDS >> Mysql

MySQL SELECCIONE DONDE EN LA LISTA y NO EN LA LISTA en el mismo SQL

genere una declaración de unión externa para que obtenga:

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

donde ids es una subconsulta que enumera todos los valores, algo como esto:

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

asegúrese de seleccionar ids.id , no table_live.id . De esa manera, los ID siempre se mostrarán y moderation_date solo si la fila correspondiente existe en table_live.

Otro enfoque sería mantener la consulta como la tenía, almacenar el resultado en una matriz y luego fusionar las matrices en php para conservar todas las claves y completar los valores solo donde la clave coincide en ambas matrices.

No estoy muy seguro de qué tipo de biblioteca de base de datos está utilizando, así que no sé cómo obtener una matriz del conjunto de resultados, pero suponga que habría almacenado las filas en una matriz php, usando una representación de cadena de la identificación como clave y la fecha como valor, entonces este código debería funcionar:

$items = array(
    '1' => NULL
,   '2' => NULL
,   ...
); 
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);

ver:http://php.net/manual/en/function.array -merge.php