2

「is_featured」列を共有する 2 つの異なるテーブルがあります。「is_featured」がチェックされているすべてのコンテンツを選択し、結果を「date_display」desc で並べ替える必要があります。

            PHOTOS

            item_name  |  date_display  |  is_featured
            photo1     |  01-02-13      |  yes
            photo2     |  02-12-13      |  yes
            photo6     |  06-24-12      |  no
            photo23    |  09-24-12      |  no

            VIDEOS

            item_name  |  date_display  |  is_featured
            video5     |  01-14-13      |  no
            video10    |  03-09-13      |  no
            video30    |  03-21-13      |  yes
            video17    |  11-14-12      |  yes


            DESIRED RESULTS - All FEATURED CONTENT Sorted by Date DESC

            item_name  |  date_display  |  is_featured
            video30    |  03-21-13      |  yes
            photo2     |  02-12-13      |  yes
            photo1     |  01-02-13      |  yes
            video17    |  11-14-12      |  yes

この UNION クエリで目的の結果を得ることができます。

            SELECT *
            FROM (SELECT item_name, date_display
            FROM photos
            WHERE is_featured='yes'
            UNION
            SELECT item_name, date_display
            FROM videos
            WHERE is_featured='yes'
            ) x
            ORDER BY date_display DESC

今必要なのは、各テーブルの item_names に一意の識別子を追加できるようにすることです。例: photos.item_name および videos.item_name。

私が持っているクエリでそれは可能ですか?

最終的に次のようなことをする必要があります: If (item_name is from Photos table) { do this }

4

1 に答える 1

4

次のようなものを試してください:

...
FROM (SELECT item_name, date_display, 'photo' AS media_type
    FROM photos...

ビデオサブクエリについても同様です。これにより、結果セットに列 media_type が作成されます。これは、写真の場合は「写真」、ビデオの場合は「ビデオ」です。

結果セットは次のようになります。

        item_name  |  date_display  |  media_type
        video30    |  03-21-13      |  video
        photo2     |  02-12-13      |  photo
        photo1     |  01-02-13      |  photo
        video17    |  11-14-12      |  video

その値を正確に確認する方法は、クエリ結果をどのように処理するかによって異なりますが、具体的に示すために Code Igniter のような疑似コードをいくつか示します。状況に応じて、次のように調整できます。

foreach($query->result() as $row) {
    if ($row->media_type == 'photo') {
        $featured_photos[$row->item_name] = $row;
    }
    else {
        $featured_videos[$row->item_name] = $row;
    }
}

この例は、クエリのユニオンの作業を元に戻すだけなので、少しばかげていますが、要点は、結果が返されたら、media_type フィールドを使用してアイテムがどこから来たのかを区別できるということです。

于 2013-06-12T02:58:52.930 に答える