PHP MySQL从2个表中获取数据

时间:2012-09-06 09:46:22

标签: php mysql

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

文件表:

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

代码假设只显示与用户关联的文件。

3 个答案:

答案 0 :(得分:5)

您需要做的是加入表格。

最常见的JOIN类型:

  1. INNER JOIN - 用于匹配可与ON()语句匹配的数据。如果ON()不匹配,将排除结果。
  2. LEFT JOIN - 如果您在ON()中匹配的数据不必存在,则使用此选项。它只是将数据附加到原始FROM,如果没有匹配数据,则用NULL填充列。
  3. 示例

    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'
    

答案 1 :(得分:2)

您正在使用查询进行经典的笛卡尔联接:

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 :(得分:1)

加入你的桌子。

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