0

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

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

如果是图片,那么它的 url 是这样的:www.example.com/image.php?id=...

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

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?身份证=

例如:

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

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

4

2 回答 2

3

像这样的东西应该工作:

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

您的结果中有两列;您可以检查“类型”以查看它是图像还是文本,以适当地处理该行。

于 2013-06-13T17:30:21.163 回答
0

您不能直接在 中执行此操作union,因为这样就不会删除重复项。您需要执行 aunion 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
于 2013-06-13T17:33:12.900 回答