Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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 如何用union来区分查询_Php_Mysql_Database_Database Design - Fatal编程技术网

Php 如何用union来区分查询

Php 如何用union来区分查询,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我正在用php/mysql创建一个博客,用户可以在其中发布文本或图像 如果它是一个文本,那么它的url如下:www.example.com/text.php?id= 如果它是一个图像,那么它的url如下:www.example.com/image.php?id= 我在两个不同的表格中插入文本和图像: Table Image: -id -url -date Table Text: -id -body -date 此时,在主页中,我需要执行一个查询,将最新的url返回到合并的文本和图像。所以我需

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

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

如果它是一个图像,那么它的url如下: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中有这样做的方法吗?

类似的方法应该可以工作:

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

你的成绩有两列;您可以检查“type”以查看它是图像还是文本,从而适当地处理该行。

类似的操作应该可以:

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

你的成绩有两列;您可以检查“type”以查看它是图像还是文本,从而适当地处理该行。

您不能在
联合中直接执行此操作,因为这样重复的内容将不会被删除。您需要执行一个
联合所有
,然后删除重复的条目:

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

您不能直接在
联合中执行此操作,因为这样重复项将不会被删除。您需要执行一个
联合所有
,然后删除重复的条目:

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

@安德鲁斯基。然后重复项将不再被删除。@GordonLinoff-什么重复项?我读这个问题的时候,他有两个表格,一个有图像,一个有文本,两个是独立的,在这种情况下,这个解决方案是有效的。这取决于他所说的“用户可以在哪里发布文本或图像”。@andrewski。然后重复项将不再被删除。@GordonLinoff-什么重复项?我读这个问题的时候,他有两个表格,一个有图像,一个有文本,两个是独立的,在这种情况下,这个解决方案是有效的。这取决于他所说的“用户可以在哪里发布文本或图像”。对不起,你说的是什么副本?对不起,你说的是什么副本?