2012-03-19 6 views
-1

私は2つのテーブルを持っています、各テーブルの一意のIDは両方のテーブルで同じです。 phpで両方のテーブルのデータを結合するにはどうしたらいいですか?MySQLはPHPで内部結合を使用します

私は正常にデータを取得する場合、私はこのようにそれを実行します。

$get_board_array = mysql_query("SELECT * FROM posts WHERE user_id_to = '$id' "); 
     while($posts = mysql_fetch_array($get_board_array)) 
     { 
      $post_id = $get_post['post_id']; 
      $html_output .= "<p>".$post_id."</p>"; 
     } 

別々のテーブルからデータを引き出し、それがすべて混ざっ得ていないため、私はこのような何かをやって考えていた通り:

$get_arrayA = mysql_query("SELECT * FROM tableA WHERE age = '36' "); 
    while($dataA = mysql_fetch_array($get_arrayA)) 
    { 

     $dataA_id = $dataA['id']; 
     $dataA_firstName = $dataA['FirstName']; 

    foreach($dataA_id) 
    { 
     $get_arrayB = mysql_query("SELECT * FROM tableB where id='".$dataA_id."'"); 
     while($dataB = mysql_fetch_array($get_arrayB)) 
     { 

     $dataB_lastName = $dataB['LastName']; 

     $html_output .= "<p>".$dataA_firstName.$dataB_lastName"</p>"; 

     echo $html_output; 
     } 
    } 
} 

これはあまりにも奇妙なことでしょうか?

私は内部結合を使用してSQL内でそれを行う方法を知っていますが、PHPや出力HTMLのように何かしますか?ワイルドカード(*)文字の使用をmisguideのため

SELECT a.id,a.FirstName,b.LastName 
FROM tableA a 
JOIN tableB b ON b.id = a.id 
WHERE a.age = '36' 
+4

ネストされたクエリが不正です!代わりに[MySQL JOINs](http://mysqljoin.com/)を見てください。それについて考えてみましょう。外部クエリによって返されたすべての行に対してクエリを実行します。これは非常に遅いですが、 'JOIN'は1つのクエリだけです。 – Bojangles

+1

あなたのステートメント: '$ dataA_id = $ dataA ['id'];'は配列を作成するのではなく、変数の値を更新するだけです – hjpotter92

+2

SQLでそれを行う方法が分かっているなら、 "PHP "あなたは '*'を選択すべきではありません。また、ループ内でクエリを入れ子にしてはいけません。できるだけ多くのデータを前面に引き出します。 – MetalFrog

答えて

1

それは次のとおりです。

+0

'USING(foo_id)'は 'ON foo.foo_id = bar.foo_id'の省略形です –

+0

私はあなたがちょうど1列を選ぶことができないと思いませんでした。 1月にPHPで本を読んだところ、SELECT *を使ってすべてのクエリをSQLで1つの章と同じように与えました。このサイトを私と私の友人のために、過去2〜3週間、仕事を休んでいる週にすると、私はSQLについて勉強しました。このおかげで、私のクエリを最適化するものは何かを助けてくれる! – user1053263

+1

@ user1053263、SQL用の非常に良い本があります。 MySQLだけを扱っているものを読んでから、[SQL Antipatterns](http://pragprog.com/book/bksqla/sql-antipatterns)を入手してください。それは高度な使い方です。 MySQLとPHPの両方を教えてくれると言われている本は、「3日間でCを学ぶ」というタイトルではそれほど良くありません。 –

1

これは(私は、スキーマやニーズを推測している)あなたの状況のた​​めのより良いクエリである可能性があります。 停止!これは、傲慢なPHP開発者がSQLを習得する必要がないと想像したときに起こります。必要なものがあれば、それを選択します。

SELECT 
    foo.foo_id, 
    foo.data as paramX , 
    bar.type, 
    bar.something_else 
FROM foo 
    INNER JOIN bar USING (foo_id) 
WHERE 
    foo.state = 'open' 
AND bar.type = 3 
+0

あなたの参加条件に問題があります –

+0

@tereškoはあなたが有用であると思われる修正を自由にすることができます。彼はどんな種類の参加が必要なのか分かりません。おそらくINNERが良いです、はい –

+0

trueですが、これは両方のプライマリキーに参加しています。プライマリキーを持っていると仮定します –

関連する問題