如何通过union来区分查询

时间:2013-06-13 17:25:17

标签: php mysql database database-design

我在php / mysql中创建一个博客,用户可以在其中发布文字或图片。

如果是文字,那么它有一个这样的网址:www.example.com/text.php?id = ...

如果是图片,那么它有一个这样的网址:www.example.com/image.php?id = ...

我在两个不同的表中插入文本和图像:

Table Image:
-id
-url
-date

Table Text:
-id
-body
-date

此时,在主页中,我需要执行一个查询,将最新的url返回给文本和图像合并。所以我需要使用UNION:

SELECT id
FROM image
ORDER BY date DESC
UNION
SELECT id
FROM text
ORDER BY date DESC

但我还需要一种区分类型(文本或图像)的方法,因此在主页中我知道是否必须使用www.example.com/text.php?id=或www.example.com/image .PHP?ID =

例如:

SELECT id, TYPE_1
FROM image
ORDER BY date DESC
UNION
SELECT id, TYPE_2
FROM text
ORDER BY date DESC

有没有办法在mysql中做到这一点?

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

SELECT id, 'image' AS type
FROM image
ORDER BY date DESC
UNION
SELECT id, 'text' AS type
FROM text
ORDER BY date DESC

您的结果中会有两列;并且您可以检查'type'以查看它是图像还是文本,以便适当地处理该行。

答案 1 :(得分:0)

您无法直接在union中执行此操作,因为不会删除重复项。您需要执行union all,然后删除重复的条目:

select id, type_1,
       (case when min(which) = max(which) then min(which)
            else 'BOTH'
        end) as WhereFrom
from (SELECT id, TYPE_1, date, 'image' as which
      FROM image
      UNION all
      SELECT id, TYPE_2, date, 'text' as which
      FROM text
     ) t
group by id, type_1
order by max(date) desc