2016-05-24 4 views
0

はのは、私はこれらの2つのテーブルがあるとしましょう:PHPで Example TablesPHPのSQL - 選択したデータを効率的二つのテーブルから

私はTagNameは、ディスプレイと配列が含まれています「フー」と呼ばれるオブジェクトを作成したいですそのタグ名に割り当てられた番号。..の

私はtagNameを「バー」私は33と545

現在、私は「バーはFooイプサム」と表示し、数字になるだろうを照会したい場合それそうのような:

$stmt = $db->prepare("SELECT * FROM DetailsTable"); 
$stmt->execute(); 
$details = $stmt->fetchAll(); 
$stmt = $db->prepare("SELECT * FROM NumbersTable"); 
$stmt->execute(); 
$numbers = $stmt->fetchAll(); 
$myObjects = array(); 
foreach($details as $detail){ 
    $foo = new Foo($detail['TagName'], $detail['Display']); 
    foreach($numbers as $number){ 
     if($number['TagName'] == $detail['TagName']){ 
      $foo.appendNumber($number['Numbers']); 
     } 
    } 
    array_push($myObjects, $foo); 
} 

class Foo { 
    private $tag, $display; 
    private $numbers = array(); 

    public function __construct($tag, $display){ 
     $this->tag = $tag; 
     $this->display = $display; 
    } 

    /** Insert getters and setters */ 
    public function appendNumber($n){ 
     array_push($this->numbers, $n); 
    } 
} 

上記のコードは擬似コードなので、私はまだコードを作成しませんでしたが、これはおそらく書いたコードです。最初に質問したかったので質問します。

基本的目的は、fooがTagNameにと表示名と異なるテーブルにある番号の配列を有していなければなりません。 TagNameはDetailsTableで一意です。

TL; DRNumbersTableDetailsTableからの詳細と、それに接続されている数字を取得し、オブジェクトにそれを置きます。

+1

あなたが本当に外部キーになっているはずです!次に、2つのテーブルをより簡単に結合することができます – JoCoaker

+0

外部キーと結合ステートメントが問題の鍵です! – xNeyte

+0

なぜあなたは車輪を再発明しようとしていますか?あなたは既にテーブルを得たので、単にキーズの左@使用してそれらを結合しよう(特定のタグのための 'のTagName =」Bar''を追加)。ところで、あなたのNumbersTableで 'id'列は、(それはおそらく、自動生成されたシーケンスだと、他の場所で使用されることはありません) – dnoeth

答えて

1

あなたはそれが得意であるところそれは、SQLエンジンは両方のテーブルからレコードを一致させる作業を行うようにする必要があります。

あなたのコードは、このように多少なります

$stmt = $db->prepare("SELECT d.TagName, d.Display, n.Numbers 
         FROM  DetailsTable d 
         LEFT JOIN NumbersTable n 
          ON n.TagName = d.TagName"); 
$stmt->execute(); 
$currentTag = ""; 
foreach ($stmt->fetchAll() as $record) { 
    if ($record['TagName'] !== $currentTag) { 
     $myObjects[] = $foo = new Foo($currentTag = $record['TagName'], $record['Display']); 
    } 
    $foo.appendNumber($record['Numbers']); 
} 
+0

おかげ無用です!感謝します! – Dubb

1

私は多分このような

何かに参加左でこれを解決することができると思いますか?

SELECT * FROM NumbersTable LEFT JOIN DetailsTable ON NumbersTable.TagName = DetailsTable.TagName

関連する問題