php - MySQL 和 PHP 中的多行合并为一行

标签 php mysql sql

Possible Duplicate:
mysql pivot/crosstab query

我正在使用 MySQL 和 PHP,我从 JOIN 查询中得到了这个表......

╔═══════╦════════════════╦═══════════════╦════════╗
║ name  ║    last_name   ║ course_name   ║ tries  ║
╠═══════╬════════════════╬═══════════════╬════════╣
║ coco  ║ valencia       ║ Course Num. 1 ║     11 ║
║ coco  ║ valencia       ║ Course Num. 2 ║     10 ║
║ coco  ║ valencia       ║ Course Num. 3 ║      4 ║
║ coco  ║ valencia       ║ Course Num. 4 ║      5 ║
║ John  ║ Smith          ║ Course Num. 1 ║      7 ║
║ John  ║ Smith          ║ Course Num. 2 ║      6 ║
╚═══════╩════════════════╩═══════════════╩════════╝

我希望我的表格结果是这样的......

╔═══════╦═══════════╦══════════════╦═══════════════╦═══════════════╗
║ name  ║ last_name ║ Course Num.1 ║ Course Num. 2 ║ Course Num. 3 ║
╠═══════╬═══════════╬══════════════╬═══════════════╬═══════════════╣
║ coco  ║ valencia  ║           11 ║            10 ║             4 ║
║ John  ║ Smith     ║            7 ║             6 ║               ║
╚═══════╩═══════════╩══════════════╩═══════════════╩═══════════════╝

我一直在寻找,但找不到方法。该解决方案可以采用 PHP 或 MySQL 或两者。

最佳答案

SELECT  name, last_Name,
        MAX(CASE WHEN course_name = 'Course Num. 1' THEN tries ELSE NULL END) `Course Num. 1`,
        MAX(CASE WHEN course_name = 'Course Num. 2' THEN tries ELSE NULL END) `Course Num. 2`,
        MAX(CASE WHEN course_name = 'Course Num. 3' THEN tries ELSE NULL END) `Course Num. 3`
FROM    tableName
GROUP BY name, last_Name

如果您的Course_Name数量未知,PreparedStatement就是您所需要的,

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN course_name =  ''',
      course_name,
      ''' then tries ELSE NULL end) AS ''',
      course_name, ''''
    )
  ) INTO @sql
FROM tableName;

SET @sql = CONCAT('SELECT  name, last_Name, ', @sql, ' 
                   FROM    tableName
                   GROUP BY name, last_Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于php - MySQL 和 PHP 中的多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576176/

相关文章:

php - 如何编写此 mySQL 查询以在每一列中显示多个数据?

mysql - 将动态文本从 MySQL 中的文本字符串移动到字符串中的另一个位置

php - 如何避免对现有代码进行 SQL 注入(inject)

sql - MYSQL 查询 DATEDIFF() 函数出错

php - 无法在 PHP 中消除 imap_open 错误通知

php - 从 PHP 中的字符串中删除 </div> HTML 标记

php - 动态计算php mysql结果总和

php - 删除外键的问题

sql - Postgresql - 在多个表上执行左连接时遇到问题

mysql - SQL如何在sql中添加if else条件