次のように、外部結合ステートメントを生成します。
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
ではありません 。そうすれば、IDは常に表示され、対応する行がtable_liveに存在する場合にのみmoderation_dateが表示されます。
もう1つの方法は、クエリをそのまま保持し、結果を配列に格納してから、すべてのキーを保持するようにphpで配列をマージし、両方の配列でキーが一致する場所にのみ値を入力することです。
使用しているdbライブラリの種類がよくわからないため、結果セットの配列を取得する方法がわかりませんが、idの文字列表現を使用して行を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