3

我正在尝试从我的数据库中合并 2 个表:

文件表:

    id
    file_name
    file_description
    file_url

access_files 表:

    id
    student_id
    file_id

这是我的 sql 代码,当前从 files 表中获取所有文件,它不显示用户选择的文件。

<?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 } ?>

该代码假定仅显示与用户关联的文件。

4

3 回答 3

6

您需要做的是加入表格。

最常见的 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'
于 2012-09-06T09:49:36.567 回答
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

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

于 2012-09-06T09:49:58.380 回答
2

加入您的餐桌。

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table1.pk = table2.fk
WHERE table1.pk = 1;
于 2012-09-06T09:49:28.677 回答