generera en yttre join-sats så att du får:
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
där ids är en underfråga som räknar upp alla värden, ungefär så här:
$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"
var noga med att välja ids.id
, inte table_live.id
. På så sätt kommer ID:n alltid att visas och modereringsdatumet endast om motsvarande rad finns i table_live.
Ett annat tillvägagångssätt skulle vara att behålla frågan som du hade den, lagra resultatet i en array och sedan slå samman arrayerna i php så att du behåller alla nycklar, och fylla i värdena endast där nyckeln matchar i båda arrayerna.
Jag är inte riktigt säker på vilken typ av db-bibliotek du använder så jag vet inte hur man skaffar en array av resultatuppsättningen, men anta att du skulle ha lagrat raderna i en php-array, med en strängrepresentation av id:t som nyckel och datumet som värde, då borde den här koden göra susen:
$items = array(
'1' => NULL
, '2' => NULL
, ...
);
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);
se:http://php.net/manual/en/function.array -merge.php