0

これは簡単な質問かもしれませんが、私が理解できる決定的な答えは見つかりません。私はPHPループをよく使用します.PHPにはかなり慣れていないので、通常は次のように単純です:

    <?php 

    $result = mssql_query("SELECT Price FROM Window_Extras WHERE ExtraID = '4' "); 

    while ($row = mssql_fetch_array($result)) { 
    ?>

<a title="<?php echo $row['Colour']; ?>"></a>

<?php }?>

非常に単純な例で、あまり意味がありませんが、私がそれらをどのように使用するかを示してくれることを願っています. 私が聞きたかった質問は、$row と $result が機能するために名前を付ける必要があるかどうかでした。たとえば、$priceresult と $pricerow という名前を付けることができますか?

これは、1 つのループに対して複数のクエリを使用したい場合があるためです。たとえば、次のようになります。

<?php 

    $result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");
$colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '8' ");

    while ($row = mssql_fetch_array($result, $colourresult)) { 
    ?>

ただし、エコーアウトしようとしたとき、これは機能しませんでした:

<?php echo $row['ColourID']; ?>

私がこれにどのようにアプローチすべきか、そして私が正しい軌道に乗っているかどうかを誰かに教えてもらえますか。うまく説明できていなかったらすみません。

4

3 に答える 3

2

最初の質問に答えるには:

はい、結果変数と行変数には任意の変数名を使用できます。PHP はそれらを何と呼ぶか​​を気にしません。実際、いつでもいくつかの名前を使用することは完全に可能です。その場合、明らかに異なる名前を付ける必要があります。

次に、次のコードが機能しない理由を尋ねて、その質問をフォローアップしました。

$result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");
$colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '8' ");

while ($row = mssql_fetch_array($result, $colourresult)) { 
     ....
}

これは、_fetch_array()関数が一度に 1 セットの結果しか処理できないためです。それぞれに対して個別の行配列をフェッチする必要があります。

これら 2 つのクエリで何をしようとしているのか、また、示した方法でそれらを同じループに入れたい理由が明確ではありません。

この 2 つのクエリは、このように一緒に使用することを論理的にする何らかの方法でリンクされていると仮定しますか? おそらく、ロードしている Extra アイテムには既知の色があります。つまり、4 番の Extra アイテムが 8 番の Color で着色されていることを知っていますか?

通常、プログラムはこの知識で作成されません。それはデータの一部になります。したがって、Extras テーブルには、値 8 を含む ColourID フィールドがあります。プログラムは、Extras レコードをロードし、ColourID が設定されていることを確認し、見た内容に従って、一致する Colors レコードをロードします。

したがって、コードは次のようになります。

$result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");

while ($row = mssql_fetch_array($result)) { 
    $colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '".$row['colourID']."' ");
    while ($row2 = mssql_fetch_array($result)) { 
        ....
    }
}

内側のループ内では、またはそれぞれwhileを使用して、いずれかのクエリからフィールドにアクセスできます(ここでも、適切と思われる名前を付けることができます)。$row$row2

ただし、これで話は終わりではありません。SQL には、SQL と呼ばれるものを使用して、PHP コードをすべて必要とせずに、これら 2 つのクエリを 1 つにマージする機能があるからですJOIN

これで、より複雑なクエリを作成できるようになりましたが、単純な PHP コードに戻ります。

$result = mssql_query("SELECT Extras.Price, Colours.ColourName FROM Extras WHERE ExtraID = '4' INNER JOIN Colours ON Colours.ColourID = Extras.ColourID");

while ($row = mssql_fetch_array($result)) { 
     ....
}

あなたが PHP と SQL の初心者であれば、これらの概念はおそらくすべて新しいものです。そのため、さらに先に進む前に、これらの概念を試して実験し、最も重要なこととして、それらに関するいくつかの (質の高い) チュートリアルを読むことをお勧めします。

それが役立つことを願っています。:)

(追伸: 上で述べたように、必ず良いチュートリアルを読んでいることを確認してください。悪い PHP の例や教育サイトには注意してください。世の中には貧弱なコードや時代遅れのテクニックを教えているサイトがたくさんあります。価値のあるものを読んでいることを確認してください。開始するのに適した場所はhttp://phpmaster.com/かもしれません)

于 2012-10-12T13:25:24.910 に答える
0

これは、mssql_fetch_array が 1 つの結果セットしか取得できないためです。したがって、 $result を削除して $colourresult を残すとうまくいくはずです。

参照: http://php.net/manual/en/function.mssql-fetch-array.php

于 2012-10-12T12:41:54.193 に答える