【问题标题】:Select table 3 rows in one line选择表3行一行
【发布时间】:2017-11-30 01:13:15
【问题描述】:

我的结果表需要在一行中获取所有 Sub_ID 内联行 Sub_ID (17,18,19)

在这样的查询中:

SELECT * 
FROM `results`
WHERE `ExamID` = 1

结果表

+----+-------+--------+--------+-------+-------+-------+
| ID | StuID | Sub_ID | ExamID | Exam1 | Exam2 | Exam3 |
+----+-------+--------+--------+-------+-------+-------+
|  1 |    70 |     17 |      1 |     0 |     0 |     0 |
|  2 |    70 |     18 |      1 |     0 |     0 |     0 |
|  3 |    70 |     19 |      1 |     0 |     0 |     0 |
|  4 |    70 |     24 |      4 |     0 |     0 |     0 |
|  5 |    70 |     25 |      4 |     0 |     0 |     0 |
+----+-------+--------+--------+-------+-------+-------+

在页面中显示表格

需要将所有 Sub_ID 内联其中 ExamID = 1

如何编写我的 SQL 语句,以获得这样的结果?:

+----+-------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| ID | StuID | Sub_ID | ExamID | Exam1 | Exam2 | Exam3 | StuID | Exam1 | Exam2 | Exam3 | StuID | Exam1 | Exam2 | Exam3 |
+----+-------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|  1 |    70 |     17 |      1 |     0 |     0 |     0 |    18 |     0 |     0 |     0 |    19 |     0 |     0 |     0 |
+----+-------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+

需要 MySQL 查询来获取该表

【问题讨论】:

  • 你试过什么?你需要什么帮助? sql语句? php函数?请阅读thisthis
  • 您需要向我们提供有关您要完成的工作的一些详细信息。请阅读stackoverflow.com/help/how-to-ask
  • 你是在求sql查询吗?
  • 您是否要求我们为您编写一个没有源查询的复杂 SQL 查询?如果是这样,那么可能不会
  • 我不能对这个表使用 Concat_Group 并且你不需要源查询

标签: php mysql row


【解决方案1】:

您好,您可以使用以下查询来获得与您请求的结果相似的结果。

解决方案 1

注意:您不会按列获取值,而是用逗号分隔在一列中。

SELECT GROUP_CONCAT(id,',',StuID,',', Sub_ID,',',ExamID,',',Exam1,',',Exam2,',',Exam3) 
FROM `results` 
GROUP BY ExamID

样本输出:

GROUP_CONCAT(id,',',StuID,',', Sub_ID,',',ExamID,',',Exam1,',',Exam2,',',Exam3)
1,70,17,1,0,0,0,2,70,18,1,0,0,0,3,70,19,1,0,0,0
4,70,20,4,0,0,0,5,70,21,4,0,0,0

如果您希望每一行在第 7 列之后爆炸(考虑到您的列),请在 foreachfor 循环中使用以下 sn-p

array_chunk(explode(';', $input), 7);

注意:删除 select 的 GROUP_CONCAT() 中不需要的列。

解决方案 2

如果您不希望以上述方式获得结果,那么唯一的解决方案是从数据库表中获取所有结果并循环进入它们并实现您想要的结果。

更新

首先您需要查询所有记录,然后执行您想要的操作。让我给小sn-p。但同样取决于你想如何实现。

$resultsQuery = mysqli_query($con, "SELECT * FROM results");
$finalResults = array();
if(mysqli_num_rows($resultsQuery) > 0){
    while($row = mysqli_fetch_assoc($resultsQuery)){
        /* 
            Here you can write your script

                    OR

            Store the $row in an array and do as per your needs
         */
    }
}

【讨论】:

  • 你能解释一下第二种解决方案吗?
  • @AhmedMamdouh 嗨,我已经更新了我的代码。请检查一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多