如何将两个MySQL列合并为一个列?

8

我想将这个MySQL表格转换为:

title1 | title2 |type  
-------+--------+----
qwe1   | qwe2   | 3  
asd1   | asd2   | 7

在PHP中向该表添加数据

title | type  
------+-----
asd1  | 7  
asd2  | 7  
qwe1  | 3  
qwe1  | 3

但我不知道如何正确地按照 PHP 表格的第一列排序。 (这是我目前正在使用的代码)
$sql = "SELECT * FROM table ORDER BY title1, title2";   
$pager = new PS_Pagination( $dbh, $sql, 3, 4, null );//pagination class
$rs = $pager->paginate(); 

while ($row = $rs->fetch(PDO::FETCH_ASSOC)){
    echo "<tr>";
    echo "<td>{$row['title1']}</td>";
    echo "<td>{$row['type']}</td>";
    echo "</tr>";

    echo "<tr>";
    echo "<td>{$row['title2']}</td>";
    echo "<td>{$row['type']}</td>";
    echo "</tr>";
}       

echo "</table>";

2
我很好奇,你为什么需要那个?你确定你的表格设计没问题吗? - Your Common Sense
6个回答

9

在SQL中,您可以使用UNION来实现。并对整个查询使用ORDER BY

SELECT `title1` AS `title`, `type`
FROM `table`
UNION
SELECT `title2` AS `title`, `type`
FROM `table`
ORDER BY `title` ASC

输出

+-------+------+
| TITLE | TYPE |
+-------+------+
|  asd1 |    7 |
|  asd2 |    7 |
|  qwe1 |    3 |
|  qwe2 |    3 |
+-------+------+

Fiddle: http://sqlfiddle.com/#!2/ff9cf/1


1
请注意,在第二个查询中不需要使用 AS - Salman A

5

尝试:

SELECT 'title1' AS 'title', 'type' from 'table'
UNION
SELECT 'title2' AS 'title', 'type' from 'table'
ORDER BY 'title'

希望我语法没错。

基本上,您想要执行两个查询并合并结果,这就是UNION所做的。

编辑(有关UNION和UNION ALL之间的区别,请参见其他答案)。


4

在使用Union之前,可以使用As来重命名列,以获得相同的结构。

SELECT title1 as title, type
FROM YourTable
UNION ALL
SELECT title2 as title, type
FROM YourTable

2

我认为你需要使用UNION:

SELECT title1, type
FROM YourTable
UNION ALL
SELECT title2, type
FROM YourTable

如果您不想要重复的数据,可以使用 UNION 而不是 UNION ALL 来删除它们。
--编辑
正如建议的那样,如果您想对这些结果进行排序,只需添加 ORDER BY 子句并为列设置别名即可:
SELECT title1 title, type
FROM YourTable
UNION ALL
SELECT title2 title, type
FROM YourTable
ORDER BY title

祝你好运。


我认为这里的主要问题是排序。因此,您应该在查询中添加ORDER BY type, title,并将别名添加到单个SELECT语句中。 - Till Helge
@TillHelgeHelwig -- 我认为 OP 不是在问如何排序,而是如何获取 UNION -- 他们试图使用 ORDER 获取 UNION。不过添加 ORDER BY 子句很容易... - sgeddes

2
您需要联合
即。
select * from (select title1 as title, type
from table
union
select title2 as title, type
from table) order by title

0

根据我的理解,您想要将title1和title2连接起来,然后排序。

我不明白为什么每个人都在使用联合。

Select concat(title1,title2) title, type
from yourTable
order by title asc 

可以完成任务

编辑:无法从iPhone编写格式化的代码文本。谢谢fthiella


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接