2

我有两个不同的表共享一个“is_featured”列。我需要选择所有选中“is_featured”的内容并按“date_display”降序对结果进行排序。

            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 回答