0

わかりました、これは少し奇妙に聞こえるかもしれませんし、複雑すぎるかもしれません。これが状況です。I 2 セットの 3 つのクエリ。私がやろうとしていることを正確に説明するために、簡単な例を作成しようとします。

クエリ:

//First set of queries
$query1 = "SELECT Name, Date FROM Table1";
$query2 = "SELECT Type, Place, Location FROM Table2";
$query3 = "SELECT One FROM Table3";

//Second set of queries
$query4 = "SELECT Name, Date FROM Table1 WHERE ID=1";
$query5 = "SELECT Type, Place, Location FROM Table2 WHERE ID=1";
$query6 = "SELECT One FROM Table3 WHERE ID=1";

これら 2 つのクエリを組み合わせることはできないと私が言ったとき、あなたは私を信頼する必要があります。これらは、私がやろうとしていることの概念を理解するために単純化された select ステートメントです。

だからここに私のphpコードがあります:

//Set 1
$data1 = mysql_query($query1) or die(mysql_error());
$data2 = mysql_query($query2) or die(mysql_error());
$data3 = mysql_query($query3) or die(mysql_error());
while ($line1 = mysql_fetch_array($data1, MYSQL_ASSOC) &&
        $line2 = mysql_fetch_array($data2, MYSQL_ASSOC)) {
    while ($line3 = mysql_fetch_array($data3, MYSQL_ASSOC)) {
        //COMBINE $line1, line2, line3 into a single $lineSet1 -- HOW DO I DO THIS?
    }
}

//Set 2
$data4 = mysql_query($query4) or die(mysql_error());
$data5 = mysql_query($query5) or die(mysql_error());
$data6 = mysql_query($query6) or die(mysql_error());
while ($line4 = mysql_fetch_array($data4, MYSQL_ASSOC) &&
        $line5 = mysql_fetch_array($data5, MYSQL_ASSOC)) {
    while ($line6 = mysql_fetch_array($data6, MYSQL_ASSOC)) {
        //COMBINE $line4, line5, line6 into a single $lineSet2 -- HOW DO I DO THIS?
    }
}

//Append $lineset1 and $lineset2 so I have 1 resultset $results
$result = array_merge($lineSet1, $lineSet2);
//So now I can pass this $result array into my array2csv function that takes a multidimensional array:
function array2csv(array &$array)
{
   if (count($array) == 0) {
     return null;
   }
   ob_start();
   $df = fopen("exportedLeads{$_SESSION['id']}.csv", 'w');
   fputcsv($df, array_keys(reset($array)));
   foreach ($array as $row) {
      fputcsv($df, $row);
   }
   fclose($df);
   return ob_get_clean();
}

これは非常に複雑に思えますが、私はかなり混乱しており、php が得意ではありません。どんな助けでも大歓迎です。ありがとう!

TABLE1:

ID | Name | Date

TABLE2:

ID | Table1_ID | Type | Place | Location

TABLE3:

ID | Table1_ID | One

編集:私はJOIN声明を読んでいます。これはその可能性のあるケースですか?

4

2 に答える 2

1

JOINID が一致すると仮定して、両方のセットを 1 つのクエリに再開できます。

最初に 1 つのクエリに設定します。

SELECT t1.Name, t1.Date, t2.Type, t2.Place, t3.One FROM Table1 t1
  JOIN Table2 t2
    ON t2.Table1_ID = t1.ID
  JOIN Table3 t3
    ON t3.Table1_ID = t1.ID

1 つのクエリへの 2 番目のセット:

SELECT t1.Name, t1.Date, t2.Type, t2.Place, T2.Location, t3.One
  FROM Table1 t1
  JOIN Table2 t2
    ON t2.Table1_ID = t1.ID
  JOIN Table3 t3
    ON t3.Table1_ID = t1.ID
 WHERE t1.ID = 1
于 2013-08-13T20:02:19.940 に答える
0

3 つのクエリがすべて同じ数の行を返すと仮定すると、代入演算子を悪用できます。

while(($row1 = mysql_fetch($result1))
   && ($row2 = mysql_fetch($result2))
   && ($row3 = mysql_fetch($result3))) {

3 つの結果セットすべてから並行して取得します。欠点は、結果セットの長さが異なる場合、SHORTEST 結果セットと同じ数のレコードしか取得できないことです。たとえば、これらの fetch 呼び出しのいずれかが false を返すとすぐに、他の 2 つの結果にまだデータがある場合でも、while 全体が中止されます。

于 2013-08-13T19:49:12.143 に答える