2011-09-08 18 views
1

私はテーブルのレコードをループしていますが、ループごとに別のテーブルを開いてそこからデータを引き出します。 2番目のテーブルのフィールドでメインループ($ rs)をオーダーする必要があります。php sorting sql records

私はそう私に簡単に行くややPHPやSQLの初心者だ:P

コード例:

$sql_result = mysql_query("SELECT * FROM table1", $db); // i want this to ORDER BY data from table2 
while($rs = mysql_fetch_array($sql_result)) { 
    $sql_result2 = mysql_query("SELECT * FROM table2 WHERE id='$rs[data]'", $db); 
    $rs2 = mysql_fetch_array($sql_result2); 

    //get data from table 2 
+0

さらに詳しい情報、具体的にはテーブルの査定、正確に何を達成しようとしているのかが必要です。 –

答えて

1

結果セットをループして、各行のための2番目のクエリを実行するには、悪い習慣ですデータベースに不必要な負荷を与えます。

SELECT t1.* 
     FROM table1 t1 
INNER JOIN table2 t2 ON t2.id = t1.data 
    ORDER BY t2.field 

この方法で、あなたは単一のクエリですべてのデータを取得することができます:それはあなたのように見える
INNER JOINが必要です。


EDIT:
一般的に、あなたがすべての列(SELECT *)を返す回避しようと、あなたが本当に必要な列だけを選択する必要があります。

SELECT t1.id, t2.field1, t1.field2, ... 

これはのみの負荷を軽減しません(データベースを選択してネットワーク経由で転送するデータが少なくなりますが)、ダブルカラム名は問題を起こすため、ダブルカラム名を削除するのに役立ちます。

あなたがこの問題を避けるために2つのことを行うことができます

:両方のテーブルが同じ名前と同じ内容(これらの列は、テーブルを結合するために使用されている場合など)、ちょうどそれらのいずれかを選択して列を持っている場合

  1. を(どれが同じであっても同じものなので)。

    SELECT t1.id, t2.id AS AnotherId, ... 
    

    これは2番目の列が発生します:両方のテーブルが同じ名前と異なる内容の列があり、それらの両方が必要な場合

  2. 、最も簡単な方法は、それらのいずれかを与えることを別名だろう「AnotherId」という名前になりますので、$rs[AnotherId]で取得できます。
    正直なところ私はPHPの専門家ではないので、PHPが$rs[table.field]を理解しているかどうかわかりませんが、クエリーが同じ名前の2つのカラムを返すときに問題がある十分なデータアクセス技術があります。絶対に間違ってはいけない

+0

ありがとうございます。私はecho文のフィールドをどのように呼び出すのですか?私は通常、$ rs [field]を使用します。同じであるか、$ rs [table.field]を行う必要がありますか? – user880356

+0

およびt1の意味 – user880356

+0

列名は結果セットで返されたときに自動的に変更されないので、名前で引き続き参照することができます。 SELECT *を使用してすべての列を取得すると、結果セットのすべての列が実際にアプリケーションに必要な場合を除き、効率的ではありません。したがって、t1とt2からどの列を正確に指定するのが良いでしょうか。両方のテーブルに同じ名前の列があります。 –