我有两个不同的表共享'is_featured'列。我需要选择所有选中的'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。
我的查询可以吗?
我最终需要做以下事情: 如果(item_name来自Photos表){do this}
答案 0 :(得分: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字段来区分项目的来源。