2010-11-24 4 views
1

私は3つのエンティティを持ち、それぞれに対応するテーブルがあります。私はこれらの3つのテーブルを検索するタスクを持っているので、並べ替え条件に従って1つのページに結果が表示されます。私は適切な解決策を探しています。私にはいくつかのアイディアがある。ページ分割出力で異なるテーブルの検索結果を一致させる

テーブルごとに3つの検索クエリを実行し、並べ替え条件を考慮して結果を表示することができます。 1つのページにすべての検索結果が表示されるのは簡単です。結果をページに分割する必要があるときは、次のアルゴリズムを使用できます。同じ3つの検索クエリを実行し、結果の行IDとテーブル名を現在の検索のセッションに必要な並べ替え順序で保存します。検索開始時にこれらのクエリを1回だけ実行します。 選択されたページによると、私はセッションでIDを見つけ、そのIDで行を見つけるために3つの簡単なクエリを実行します。

あなたはこの問題をより良く解決する方法をお持ちですか? 私はMySQL + PHP + Zendフレームワークベースでそれを行います。

答えて

1

これは基本的な方法です。この例では、各テーブルに 'id'フィールドと 'timestamp'フィールドがあり、結果をタイムスタンプフィールドでソートする必要があります。

<? 
function bubblesort(array $items) { 
    // Sorts the items in a two-dimensional array based on a 
    // timestamp in the first field of the arrays passed. 
    do{ 
     $flag = false; 
     for ($i = 0; $i < (count($items) - 1); $i++) { 
      if(strtotime($items[$i][0]) > strtotime($items[$i + 1][0])) { 
       $swap = $items[$i]; 
       $items[$i] = $items[$i + 1]; 
       $items[$i + 1] = $swap; 

       $flag = true; 
      } 
     } 
    } 
    while($flag); 
    return $items; 
} 
$results = array(); 

// Get results for the first table 
$result = mysql_query("SELECT `timestamp`, `id` FROM `table1`;"); 
if (!$result) 
    die(mysql_error()); 
while ($row = mysql_fetch_array($result)) 
    $results[] = array($row[0], $row[1]); 

// Get results for the second table 
$result = mysql_query("SELECT `timestamp`, `id` FROM `table2`;"); 
if (!$result) 
    die(mysql_error()); 
while ($row = mysql_fetch_array($result)) 
    $results[] = array($row[0], $row[1]); 

// Get results for the third table 
$result = mysql_query("SELECT `timestamp`, `id` FROM `table3`;"); 
if (!$result) 
    die(mysql_error()); 
while ($row = mysql_fetch_array($result)) 
    $results[] = array($row[0], $row[1]); 

// Sort the joint results 
$results = bubblesort($results); 
?> 

もちろん、それぞれのクエリは個々のテーブルに適合させる必要があります。バブルソートアルゴリズムを使用していますが、期待している結果の量によっては、別のソートアルゴリズムが良いかもしれません。

UNION(the documentationを参照)を使用して3つのSELECTクエリを1つにマージする方が良いかもしれませんが、必要なクエリを伝えるためのテーブルの構造については十分に分かりません。

+0

はい、私のアルゴリズムと同じように、ページの結果に分割しないように記述します。私の仕事はもっと複雑で、私は解決するためのさまざまなアプローチを探しています。 –

+0

ああ、申し訳ありませんが、私はあなたの質問に誤解しました。それを読んだ後は、あなたが今のものよりも良い方法を考えることができません。 – EdoDodo

関連する問題