我正在尝试合并我的数据库中的两个表:
文件表:
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 } ?>
代码假设只显示与用户关联的文件。
答案 0 :(得分:5)
您需要做的是加入表格。
最常见的JOIN类型:
示例强>
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;