2016-03-31 9 views
1

これまでに何をしてきたのか、何が出力されるのかを段階的に示す必要があります。PHP複数のテーブルとその値を1つのテーブルに出力する

次のように私はテーブルが店を求めているまず第一に:

id | store_name 
1 S1 
2 S2 
3 S3 
4 S4 

を、各STORE_NAMEは、項目番号、数量、コスト、販売価格や日付を含む独自のテーブルを持っている - そのうちの一つとして、次のようになります。

Table Name : S1 
id | item_no | qty | cost | sell | date 
1  b1001 10  6  12  2015-3-31 
2  b1002 12  6  12  2015-3-31 
3  b1003 6  3  6  2015-3-30 
4  b1004 4  5  10  2015-3-30 

また、各store_nameテーブルについても同様です。

item_no | cost | sell | S1 | S2 | S3 | S4 
b1001  10  12 10  9 8  N/A 
b1002  6  12 6  3 N/A N/A 
b1003  3  6  6  6 N/A 12 
b1004  5  10 4  N/A 10 10 

は、上記店舗、注意してください。

私は何を目指してることは、次のように私はお互いに次の各号の数を比較する方法、各ストアの多くの数量およびそれらをリストする出力を必要とするということです以下のように(それが1店舗名可能性があり、またはそれらのすべての可能性が)ユーザーの要求によってアップ選ばれています。

<form method="POST" action="Somewhere.php"> 
//Looping To show how many stores 
<input type=checkbox name=store[] value={$row['stores_name']} style='width:20px; height:20px;'>{$row['stores_name']} 
//End of Looping 
</form> 

Somewhere.phpに提出した後、我々はforeachの操作を実行して、選択した店舗を見つけるために持っていますループ:

$allstore = $_POST['store']; 

    foreach ($allstore as $store=>$value) { 

//Don't Know what code should be here 

} 

私は自分のやり方でやってみましたが、store_nameテーブルを他のテーブルの上に表示しています。それを行う方法はありますか?その他の提案はありますか?すべての店舗で同じですCOST売り価格:

に注意してください!

答えて

1

INNER JOINを使用して、テーブルからデータを選択できます。例えば

は、この機能のcreateSelectを使用して、それにあなたのテーブル名からキーを持つ配列を渡す、すなわち$allstore1 = ['S1' => 1, 'S2' => 2, 'S3' => 3]

<?php 
function createSelect($allstore) 
{ 
    if (empty($allstore)) 
     return ""; 

    $querySelect = ""; 
    $queryJoin = ""; 
    $baseTable = ""; 
    foreach ($allstore as $store => $value) { 
     if (!$querySelect) { 
      $baseTable = $store; 
      $querySelect = "SELECT " . $store . ".item_no, " . $store . ".cost, " . $store . ".sell, " . $store . ".qty as " . $store; 
     } else { 
      $querySelect .= ", " . $store . ".qty as " . $store; 
      $queryJoin .= " 
      INNER JOIN " . $store . " ON " . $baseTable . ".item_no = " . $store . ".item_no"; 
     } 
    } 
    $querySelect .= " FROM " . $baseTable; 
    $query = $querySelect . $queryJoin; 

    return $query; 
} 

$allstore1 = ['S1' => 1, 'S2' => 2, 'S3' => 3]; 
$allstore2 = ['S1' => 1]; 
$allstore3 = []; 

var_dump(createSelect($allstore1), createSelect($allstore2), createSelect($allstore3)); 

して出力することになります。私の質問を解決するお時間を

string(201) "SELECT S1.item_no, S1.cost, S1.sell, S1.qty as S1, S2.qty as S2, S3.qty as S3 FROM S1 
      INNER JOIN S2 ON S1.item_no = S2.item_no 
      INNER JOIN S3 ON S1.item_no = S3.item_no" 
string(57) "SELECT S1.item_no, S1.cost, S1.sell, S1.qty as S1 FROM S1" 
string(0) "" 
+0

おかげで、私はあなたがそこで何をしたのか理解しようとしていますが、私はちょっと失ってしまいました。上記のコードに基づいてテーブルを作成する方法を教えてください。私がそれを実行しようとすると、利用可能なすべてのアイテムを含む1つのストアしか表示されないからです。 –

+0

あなたは所望の出力を得るためにsql selectを取得します。例えば、3つのテーブル 'S1'、' S2'、 'S3'は、フィールドを持つ行を得ます: ' item_no |コスト|売る| S1 | S2 | S3 ' –

関連する問題