【问题标题】:How to combine two MySQL columns to one column?如何将两个 MySQL 列合并为一列?
【发布时间】:2013-01-23 22:45:26
【问题描述】:

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

【问题讨论】:

  • 我很好奇你为什么需要那个?你确定你的餐桌设计没问题?

标签: php mysql sorting


【解决方案1】:

在 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 |
+-------+------+

小提琴:http://sqlfiddle.com/#!2/ff9cf/1

【讨论】:

  • 请注意,AS 在第二个查询中不是必需的。
【解决方案2】:

尝试:

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

希望我的语法正确。

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

编辑(请参阅其他答案了解 UNION 和 UNION ALL 之间的区别)。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你需要union

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

      【讨论】:

        【解决方案5】:

        我认为你需要使用 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 语句中。
        • @TillHelgeHelwig -- 我不认为 OP 是在问如何订购,而是如何获得 UNION -- 他们试图通过订购来获得 UNION。很容易添加 ORDER BY 子句...
        【解决方案6】:

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

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

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

        会做的工作

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

        【讨论】:

          猜你喜欢
          • 2014-05-09
          • 1970-01-01
          • 2010-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-14
          • 2021-05-17
          • 1970-01-01
          相关资源
          最近更新 更多