Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 联合查询列名上的MySQL唯一标识符_Php_Mysql - Fatal编程技术网

Php 联合查询列名上的MySQL唯一标识符

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

我有两个不同的表,它们共享一个“is_特色”列。我需要选择所有选中的内容“是特色的”,并按“日期显示”说明对结果进行排序

            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个单独的查询。至少更快、更少的内存消耗。