0

私はこれを何時間も見つめています。私は間違いを見つけることができません。誰が私が何をしたのか教えてもらえますか? それとも比較する良い方法はありますか?

$res1=mysql_query(**query for table1**);
$n1=mysql_num_rows($res1);
$res2=mysql_query(**query for table 2**);
$n2=mysql_num_rows($res2);

for($i=0;$i<$n1;$i++)
{
    $r1=mysql_fetch_row($res1);

    for($j=0;$j<$n2;$j++)
    {
        $r2=mysql_fetch_row($res2);
        if($r1[0]==$r2[0])
        {
            echo $r1[0]."<br>";
        }
    }
}

表 1 には次の要素が含まれます: 1,2,3,16,18,19,20,21,22,24,23 表 2 には次の要素が含まれます: 23,21

ただし、プログラムは一致を返しません。なんで?

4

3 に答える 3

1

だからここで起こっているのは

  1. 結果1のすべての要素を正しくループしていますが、結果2のすべての要素を正しくループしていません。

結果の2つの要素は、最初の反復で使い果たされています。

投稿したサンプルデータから、ループは次のようになります。

r1が1の場合

r2は23,21です

r1が2の場合

r2が使い果たされました。

結果2を再度リセットするには、次のことを行う必要があります。

mysql_data_seek($ res2,0); 毎回

つまり、forループは次のようになります

for($i=0;$i<$n1;$i++) {

    $r1=mysql_fetch_row($res1);

    mysql_data_seek($res2,0);
    for($j=0;$j<$n2;$j++)     {
        $r2=mysql_fetch_row($res2);
        if($r1[0]==$r2[0])         {
           echo $r1[0]."<br>";
        }
    }
}
于 2013-01-26T10:34:55.100 に答える
0

あなたが欲しいのはINNER JOIN. AJOINはリレーショナル データベースの基本コンポーネントであり、複数のテーブルのデータをさまざまな方法で交差させることができます。

sについての私のお気に入りの説明は、JOIN実際にはBugzilla のドキュメントからのものです。さまざまなタイプをすべて説明する素晴らしい仕事をしています。

あなたの場合、クエリは次のようになります。

SELECT
    table1.field1, table1.field2, ...,
    table2.field2, table2.field2, ...
FROM table1
INNER JOIN table2 ON (table1.id = table2.id)

閲覧用にSQL Fiddleを作成しました。

于 2013-01-26T10:38:00.043 に答える
0

データベースが単一のクエリで結合を実行できるようにします。それが彼らの目的であり、通常、インデックスが利用可能な場合など、より効率的なアルゴリズムを使用します。

于 2013-01-26T10:32:48.403 に答える