3

データベースの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 } ?>

このコードは、ユーザーに関連付けられているファイルのみを表示することを想定しています。

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'

2つのテーブルの接続方法を指定する必要があります。

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

リンクを指定しない場合、またはリンクがない場合、データベースは最初のテーブルのすべての行を2番目のテーブルのすべての行にリンクしようとします。

于 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 に答える