генерирайте външен израз за присъединяване, така че да получите:
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
където ids е подзаявка, изброяваща всички стойности, нещо подобно:
$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"
не забравяйте да изберете ids.id
, а не table_live.id
. По този начин идентификаторите винаги ще се показват, а moderation_date само ако съответният ред съществува в table_live.
Друг подход би бил да запазите заявката такава, каквато сте я имали, да съхраните резултата в масив и след това да обедините масивите в php, така че да запазите всички ключове, и да попълните стойностите само там, където ключът съвпада и в двата масива.
Не съм много сигурен какъв вид db библиотека използвате, така че не знам как да получа масив от набора от резултати, но да предположим, че бихте съхранили редовете в php масив, използвайки низово представяне на идентификатора като ключ и датата като стойност, тогава този код трябва да свърши работа:
$items = array(
'1' => NULL
, '2' => NULL
, ...
);
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);
вижте:http://php.net/manual/en/function.array -merge.php