sql >> データベース >  >> RDS >> Mysql

同じSQLのMySQLSELECTWHEREINLISTとNOTINLIST

    次のように、外部結合ステートメントを生成します。

    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




    1. mysqlを使用してPDOでONDUPLICATEKEY UPDATEを使用するにはどうすればよいですか?

    2. PostgreSQLでn行のNULLを生成する

    3. MySQLから直接フェッチした場合、NodeJSが応答したMySQLのタイムゾーンが異なります

    4. 2つの異なるwhere句を持つ2つのデータセットを返す必要があります