2012-09-06 94 views
3

我想2代表從我的數據庫相結合:PHP MySQL的從2個表中獲取數據

文件表:

id 
    file_name 
    file_description 
    file_url 

access_files表:

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

該代碼假設僅顯示與用戶關聯的文件。

回答

5

你需要做的是加入表格。

最常見的連接類型:

  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' 
+0

+1對於很好的詳細解釋! – Fluffeh

1

加入您的表格。

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table1.pk = table2.fk 
WHERE table1.pk = 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 

如果你不指定鏈接 - 或者沒有鏈接,數據庫將嘗試將第一個表中的每一行與第二個表中的每一行鏈接起來。