我在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中做到这一点?
答案 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