Php 联合查询列名上的MySQL唯一标识符
我有两个不同的表,它们共享一个“is_特色”列。我需要选择所有选中的内容“是特色的”,并按“日期显示”说明对结果进行排序Php 联合查询列名上的MySQL唯一标识符,php,mysql,Php,Mysql,我有两个不同的表,它们共享一个“is_特色”列。我需要选择所有选中的内容“是特色的”,并按“日期显示”说明对结果进行排序 PHOTOS item_name | date_display | is_featured photo1 | 01-02-13 | yes photo2 | 02-12-13 | yes photo6
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
我可以通过此联合查询获得所需的结果:
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_名称中。例如:photos.item_name和videos.item_name
根据我的疑问,这可能吗
我最终需要做如下事情:
如果项目名称来自照片表{do this}请尝试以下操作:
...
FROM (SELECT item_name, date_display, 'photo' AS media_type
FROM photos...
对于视频子查询也是如此。这将在您的结果集中创建一个列媒体类型,即照片为“照片”,视频为“视频”
您的结果集如下所示:
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
具体检查该值的方式取决于如何处理查询结果,但这里提供了一些代码点火器之类的伪代码,用于具体化。您可以根据您的情况进行调整:
foreach($query->result() as $row) {
if ($row->media_type == 'photo') {
$featured_photos[$row->item_name] = $row;
}
else {
$featured_videos[$row->item_name] = $row;
}
}
这个例子有点傻,因为它只是撤销了查询中联合的工作,但关键是,一旦返回结果,您可以使用“媒体类型”字段来区分项目的来源。尝试以下操作:
...
FROM (SELECT item_name, date_display, 'photo' AS media_type
FROM photos...
对于视频子查询也是如此。这将在您的结果集中创建一个列媒体类型,即照片为“照片”,视频为“视频”
您的结果集如下所示:
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
具体检查该值的方式取决于如何处理查询结果,但这里提供了一些代码点火器之类的伪代码,用于具体化。您可以根据您的情况进行调整:
foreach($query->result() as $row) {
if ($row->media_type == 'photo') {
$featured_photos[$row->item_name] = $row;
}
else {
$featured_videos[$row->item_name] = $row;
}
}
这个例子有点傻,因为它只是撤销了查询中联合的工作,但关键是一旦返回结果,就可以使用“媒体类型”字段来区分项目的来源。Yes。但是你能改进你的答案,让更多的读者更容易理解/明白吗?那么,我会重复这样的话吗$行['photo.item_name']我添加了更多的解释-请让我知道这是否有用,或者更多的上下文是否有益。最重要的是,现在您有了一个对象或数组,其中包含三个字段:项目名称、日期显示和媒体类型。如果我只是试图从每个表中收集所有项目,其中的项目特征=是,那么我是否应该根本不使用联合?有更好的办法吗?@tonyb先生,在这种情况下,你应该使用UNION。最好是3个单独的查询。至少更快、更少的内存消耗。是的。但是你能改进你的答案,让更多的读者更容易理解/明白吗?那么,我会重复这样的话吗$行['photo.item_name']我添加了更多的解释-请让我知道这是否有用,或者更多的上下文是否有益。最重要的是,现在您有了一个对象或数组,其中包含三个字段:项目名称、日期显示和媒体类型。如果我只是试图从每个表中收集所有项目,其中的项目特征=是,那么我是否应该根本不使用联合?有更好的办法吗?@tonyb先生,在这种情况下,你应该使用UNION。最好是3个单独的查询。至少更快、更少的内存消耗。