1

次のように、php ページで 2 つの select ステートメントを使用しています。

$num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

現在、結果は次のように別々の while ループを使用して表示されます

while($nval=  mysql_fetch_array($num1))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";
        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");
print $num2;

print "<table border='0' width='875' align='center'>

<tr><td colspan=5 height=10></td></tr>
<tr>
    <td width='200' bgcolor='#99CCF5' align='center'><b>Country</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Mid</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Low</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>High</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Study Location</b></td>
    <td width='139' bgcolor='#99CCF5' align='center'><b>Reference</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Quality</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Relevance</b></td>
    <td width='61' ></td>
</tr>";

while($nval=  mysql_fetch_array($num2))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";

        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

これらの 2 つのテーブルを 1 つのテーブルにマージする方法があるかどうか知りたいです。

結果は次のようになります。

Value1(両方のクエリに共通。例: 国)、Value2(最初のクエリから)、Value2(2 番目のクエリから)

mysql には、両方のクエリが結果を表示する単一のテーブルしかありません。


私の質問がすべてを混乱させて申し訳ありません。私は Lotus Notes 開発者であり、PHP ではありません。したがって、私はSQLの初心者ユーザーにすぎません。

ここで、もう一度クエリを繰り返します...

現在、1 つのテーブルからの 2 つのクエリの結果を 2 つのテーブルに表示しています。これらの結果を 1 つのテーブルにまとめたいですか?

つまり、新しいテーブルには 3 つの列が必要です。最初に両方のテーブルから共通の値を、最初のテーブルの 2 番目の列から 2 番目の列を、2 番目のテーブルの 2 番目の列から 3 番目の列を使用します。新しいテーブルの 2 番目と 3 番目の列は、メインの mysql データから同じ列のデータを表示しています。

すべての提案に感謝します。私はこれを自分で試して、成功したらここに投稿します。

4

3 に答える 3

4

ユニオンと

( SELECT * FROM mtable WHERE SId= ? ) UNION (SELECT * FROM mtable WHERE SId= ?)

私があなたの意味を正しく理解していれば、この場合、この単純な条件についても簡単に実行できることに注意してください。

SELECT * FROM mtable WHERE SId= ? OR SId = ?
于 2011-06-14T09:33:52.470 に答える
2

申し訳ありませんが、お探しの出力/結果の種類についてはフォローできません。「結果は単一のテーブル (php ページ) 国、中間推定値 (1 番目のクエリから)、中間推定値 (2 番目のクエリから) 国、中間推定値 (1 番目のクエリから)、中間推定値 (2 番目からクエリ) 国、推定値 (最初のクエリから)、推定値 (2 番目のクエリから) など"

とにかく、最初の SELECT ステートメントを実行して mtable.SId を取得し、次に他の複数の SELECT (ループ内) を実行して mtable から他の列を読み取る必要はないと思います。

以下の単一のクエリは、2 つのクエリをマージして単一の結果セットを返すため、機能するはずだと思います。

SELECT * FROM mtable 
WHERE (Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1')
OR (Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2');
于 2011-06-14T11:27:53.930 に答える
1

あなたの2つのクエリ:

  1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
  2. $num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

それらはそのWHERE部分だけが異なります。でグループ化することにより、それらを組み合わせることができますOR

mysql_query("
SELECT SId FROM mtable 
  WHERE
    (
      Pathogen='$pathogen1' && Topic='$topic1' 
      && Indicator='$ind1' && IndicatorSubGroup='$subind1'
    )
    OR
    (
      Pathogen='$pathogen2' && Topic='$topic2' 
      && Indicator='$ind2' && IndicatorSubGroup='$subind2'
    )
");

このWHERE部分は、Mysql マニュアルにも記載されている式です: Expression Syntax。探しているものを表現する方法は複数ありますが、上記の例は 1 つの方法にすぎません。

ステートメントに関するより一般的な情報が必要な場合はSELECT、ここに文書化されています: SELECT Syntax


最初は、これは JOIN の仕事のように聞こえると思いましたが、only という名前のテーブルが 1 つしかないことがわかったmtableので、結合や結合はまったく必要ありません。1 つのテーブルに対して単純な選択クエリを使用して記述できます。

SELECT * FROM mtable WHERE Pathogen='$pathogen2' AND Topic='$topic2' AND Indicator='$ind2' AND IndicatorSubGroup='$subind2'

代わりは。関心のあるすべてのレコードが返されるはずです。

クエリ

mtable には、country、midestimate などの列が含まれています。2 つの select ステートメントは、異なるパラメーターを使用して同じテーブルを検索します。結果は、単一のテーブル (php ページ) 国、midestimate (1 番目のクエリから)、midestimate (2 番目のクエリから)、midestimate (1 番目のクエリから)、midestimate (2 番目のクエリから) country、midestimate (1 番目のクエリから) に含まれる必要があります。 、midestimate (2 番目のクエリから) など。返信ありがとうございます – ゴピプリ 42 分前

あなたは、これら 2 つのクエリを 1 つに結合することについて尋ねました。それは可能です。2 つの select ステートメントがあるとします。私はあなたの質問からそれらを集めようとします:

  1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
  2. `$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

これらの2つのクエリには、いくつかの部分があります `


2 つ以上のテーブルからデータを取得する必要がある場合:

書かれているように、最初は私には a のように聞こえJOINます。結合を使用すると、2 つの間の参照に基づいて、複数のテーブルのデータを結果に結合できます。参照はクエリで定式化する必要があります。

より一般的な説明はウィキペディアにあり、Mysql のマニュアルには構文があります

SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a

これにより、 が等しいすべての製品について、 tablet1と tableの両方からすべてのフィールドが選択されます。t2t2.at1.a

必要に応じて最後に where 句を追加できます。当然*、返したい列名のみに置き換えることができます。2 つのテーブルがあるため、列名がテーブルと重複している場合は、列にテーブル プレフィックスを付ける必要があります。そうしないと、Mysql はどちらを選択すればよいかわかりません。

于 2011-06-14T10:04:23.980 に答える