【问题标题】:MySQL - One to many queryMySQL - 一对多查询
【发布时间】:2013-03-20 22:30:53
【问题描述】:

我有一张这样的桌子:

[Exam]
[exam_id] [exam_name]
   1        Test1
   2        Test2

还有这样的表:

[Module]
[module_id] [module_name] [exam_id]
    1          Module1      1
    2          Module2      1
    3          Module1      2

很明显,我们看到 Test1 分配了 2 个模块,而 Test2 分配了模块

我想要一个查询连接两个表,输出如下所示:

Test 1    Module1
          Module2

Test 2    Module1

我做了以下事情:

SELECT `exam`.'exam_id', 'exam_name', 'module_name'
FROM (`exam`) JOIN `module` ON `exam`.`exam_id`=`module`.`exam_id`

但我得到一个包含重复考试名称的输出:

Test 1 Module 1
Test 1 Module 1

Test 2 Module1

我想删除额外的测试 1,因为它们显示在我正在使用 foreach 的视图上

你们能帮我解决这个问题吗? .. 我正在使用 codeIgniter,所以你也可以在 codeigniter 中向我提供查询。

谢谢

【问题讨论】:

  • 是的......不会发生,抱歉。那不是 SQL 的工作方式。您可以拼凑一些疯狂的 UNION,将考试名称涂抹在除“标题行”之外的任何内容上,但老实说,这类报告/显示任务在帖子中处理得更好-查询。

标签: mysql codeigniter one-to-many


【解决方案1】:

MySQL 将在每一行中返回考试名称。为了防止它显示在您的视图中,您需要设置一些额外的逻辑 PHP 端来做到这一点。例如

$exam = null;

foreach($rows as $row){

    if($row['exam'] !== $exam){
        echo '<h1>'. $row['exam'] .'</h1>';
        $exam = $row['exam'];
    }

    echo '<p>'. $row['module'] .'</p>';

}

这只会打印与上一行不同的考试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多