wygeneruj zewnętrzną instrukcję join, aby uzyskać:
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
gdzie ids to podzapytanie wyliczające wszystkie wartości, coś takiego:
$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"
pamiętaj, aby wybrać ids.id
, a nie table_live.id
. W ten sposób identyfikatory będą zawsze wyświetlane, a data moderacji tylko wtedy, gdy odpowiedni wiersz istnieje w table_live.
Innym podejściem byłoby zachowanie zapytania w takim stanie, w jakim było, zapisanie wyniku w tablicy, a następnie scalenie tablic w php, tak aby zachować wszystkie klucze i wypełnić wartości tylko tam, gdzie klucz pasuje w obu tablicach.
Nie jestem do końca pewien, jakiego rodzaju biblioteki db używasz, więc nie wiem, jak uzyskać tablicę zestawu wyników, ale załóżmy, że zapisałeś wiersze w tablicy php, używając ciągu reprezentującego identyfikator jako klucz, a data jako wartość, to ten kod powinien załatwić sprawę:
$items = array(
'1' => NULL
, '2' => NULL
, ...
);
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);
zobacz:http://php.net/manual/en/function.array -merge.php