generere en outer join-erklæring, så 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
hvor ids er en underforespørgsel, der opregner alle værdierne, noget som dette:
$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"
sørg for at vælge ids.id
, ikke table_live.id
. På den måde vil id'erne altid vises, og modereringsdatoen kun, hvis den tilsvarende række findes i table_live.
En anden tilgang ville være at beholde forespørgslen, som du havde den, gemme resultatet i et array og derefter flette arrays i php, så du beholder alle nøgler, og kun udfylde værdierne, hvor nøglen matcher i begge arrays.
Jeg er ikke rigtig sikker på, hvilken slags db-bibliotek du bruger, så jeg ved ikke, hvordan man får en matrix af resultatsættet, men antag, at du ville have gemt rækkerne i et php-array ved at bruge en strengrepræsentation af id'et som nøgle, og datoen som værdi, så burde denne kode gøre tricket:
$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