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


How to combine two MySQL columns to one column?

我想转换这个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>";

在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

try:

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

希望我的语法正确。

本质上,您希望执行两个查询并合并结果,这就是UNION所做的。

EDIT(关于UNION和UNION ALL之间的区别,请参阅其他答案)。

在使用Union之前,使用As将列重命名为gt相同的结构

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

您需要联合

select * from (select title1 as title, type
from table
union
select title2 as title, type
from table) order by title

我认为您需要使用UNION:

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

如果您不想有重复项,可以使用UNION而不是UNIONALL删除。

--编辑

如前所述,如果您也打算对这些结果进行排序,只需添加ORDERBY子句并将您的列别名为:

SELECT title1 title, type
FROM YourTable
UNION ALL
SELECT title2 title, type
FROM YourTable
ORDER BY title

祝你好运。

根据我对问题的理解,您希望连接title1+title2,然后排序。

我不明白为什么每个人都在使用工会

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

能胜任的工作吗

编辑:无法在iphone上编写代码格式的文本。感谢fthiella