通过 PHP MySQL 从两个表中获取数据

3
我正在尝试将我的数据库中的2个表合并起来:
文件表:
    id
    file_name
    file_description
    file_url

访问文件表:

    id
    student_id
    file_id

这是我的SQL代码,目前正在从文件表中获取所有文件,它不显示用户选择的文件。
<?php
    $SQL = "SELECT * FROM files, access_files WHERE student_id ='$studentid'";
    $result = mysql_query($SQL);

    while ($db_field = mysql_fetch_assoc($result)) {
?>                          

<div class="accordion-group">
<div class="accordion-heading">
    <a href="#<?php print $db_field['file_id']; ?>" data-parent="#accordion" data-toggle="collapse" class="accordion-toggle collapsed">
    <?php print $db_field['file_name']; ?>
    </a>
</div>
<div class="accordion-body collapse in" id="<?php print $db_field['file_id']; ?>">
    <div class="accordion-inner">
    <?php print $db_field['file_description']; ?><br/><br/>
    <a href="?download=<?php print $db_field['file_url']; ?>" class="more">Download File Now!</a>
    <br/><br/>
    </div>
</div>
</div>
<?php } ?>

这段代码应该只显示与用户相关联的文件。
3个回答

6
你需要做的是将表JOIN起来。
最常见的JOIN类型有:
  1. INNER JOIN - 用于匹配能够在ON()语句中匹配的数据。如果ON()不匹配,则结果将被排除。
  2. LEFT JOIN - 如果你在ON()中匹配的数据不一定存在,就可以使用它。它只是将数据附加到原始FROM,并在没有匹配数据时填充列为NULL。
示例:
SELECT
 ft.id,
 ft.file_name,
 ft.file_description,
 ft.file_url,
 af.id as access_id,
 af.student_id,
 af.file_id
FROM
 files ft
 INNER JOIN access_files af ON ( ft.id = af.file_id )
WHERE
 fa.student_id = '$studentid'

3

您的查询正在进行经典的笛卡尔积操作:

SELECT * FROM files, access_files WHERE student_id ='$studentid'

您需要指定这两个表格如何相互连接:

SELECT * FROM files a, access_files b WHERE a.student_id ='$studentid' and b.studentID=a.student_id

如果您没有指定链接,或者没有链接,数据库将尝试将第一个表中的每一行与第二个表中的每一行联系起来。

2

连接您的表格。

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table1.pk = table2.fk
WHERE table1.pk = 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接