1
<?php

include 'config.php';

$conn = mysql_connect("$hostname", "$username", "$password") or die ("Failed to connect to DB.");

mysql_select_db("$dbname",$conn);

    $sql="SELECT * FROM opdrachten";
    $result=mysql_query($sql,$conn);

while ($row= mysql_fetch_array($result))
{
    echo $row['name'];
    echo "<br>";
    $opdrachtid = $row["id"];

    $sql2="SELECT * FROM resultaten WHERE(opdrachtid='".$opdrachtid."')";
    $result2=mysql_query($sql2,$conn);

    while ($row2= mysql_fetch_array($result2))
    {
        echo "
                    <li>
                        <a href=\"result.php?id=".$row2["id"]."\">
                            <img src=\"".$row2["img"]." \"width=\"150\" height=\"150\">
                            <div><span>TEXT HERE</span></div>
                        </a>
                    </li>";
    }


}           
?>

私のコードでやりたいことは(ループ内で):

  1. テーブル「opdrachten」からすべての行を取得し、それらの「名前」をエコーし​​ます。
  2. 「opdrachten」の各行から「id」を取得 > 変数 $opdrachtid に保存
  3. テーブル 'resultaten' where 'opdrachtid == $opdrachtid' (保存したばかり) から行をフェッチします
  4. 3 から取得した行から「id」と「img」をエコーし​​ます。

自分のページで見たいもの:

  1. テーブル 'opdrachten' 内の 'opdrachten' (目的) の名前で、その直下に
  2. これらの目的に割り当てられた画像 (その URL はテーブル 'resultaten' に保存されます) (WHERE opdrachten.id = resultaten.opdrachtid)

ここで読んだ関連トピックのほとんどに対する答えであるため、JOINを調べましたが、最初にエコーして変数を宣言しているため、探しているものではないようです2 番目のクエリに使用されます。

使用したテーブル:

「結果」ID | オプドラクチッド | 名前

'opdrachten' id | 名前

ここでも、resultaten.opdrachtid == opdrachten.id

よろしくお願いします:)

4

2 に答える 2

1

ここでJOINを使用して、このすべてのデータを一度に取得できるようにすることをお勧めします。ただし、注意点を 1 つ追加します。これは、現在行っているようにループでデータベースをクエリするよりも多くのメモリを必要とするため、どちらかのテーブルに多数の行がある場合、これは適切なアプローチではない可能性があります。

クエリは次のようになります。

SELECT * FROM opdrachen
INNER JOIN resultaten ON opdrachen.id = resultaten.opdrachenid

次に、次のように非常に簡単に各 ID をキーとする配列を設定できます。

$array = array();
while ($row = mysql_fetch_array($result)) {
    $array[$row['id']][] = $row;
}

これにより、次のように一度に 1 つの ID で結果を反復する簡単な方法が得られます。

foreach ($array as $id => $rows_for_id) {
      // output stuff for row group
      foreach ($rows_for_id as $resultaten_row) {
          // output stuff for resultaten rows
      }
}

その他のいくつかの提案:

  • mysql_* 関数は非推奨であるため、使用しないでください。mysqli または PDO の使用方法を学びます。
  • SELECT *クエリを使用しないでください。これは怠惰であり、帯域幅、転送時間、およびシステム メモリを浪費します。実際に興味のある特定のフィールドのみを照会します。したがって*、私の例の を必要な実際のフィールドに置き換えます。
于 2013-03-21T23:59:56.633 に答える
1
SELECT opdrachten.*, resultaten.* FROM opdrachten
INNER JOIN resultaten
ON resultaten.opdrachtid = opdrachten.id;

これを元のSQLステートメントとして使用し、それを繰り返します。

于 2013-03-21T23:51:40.403 に答える