2個のテーブルのデータを合わせて表示するので悩んでいます。
うまく言えなにのですが、
テーブルA
フィールド1 フィールド2
名前1 1
名前2 2
名前3 1
テーブルB
フィールド1 フィールド2
1 赤
2 青
上記のテーブルデータを
名前1 赤
名前2 青
名前3 赤
のように表示させたいのですが、現在は
$sql = "";
$sql .= "select*from テーブルA";
$sql .= " ORDER BY フィールド1 DESC";
$sql .= " LIMIT 0,10";
$rs = mysql_query( $sql, $conn );
while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC )){
$sql = "";
$sql .= "select*from テーブルB";
$sql .= " WHERE フィールド1 = '{$rec["フィールド2"]}'";
$rs2 = mysql_query( $sql, $conn );
if( $rec2 = mysql_fetch_array( $rs2 ) ){
$MK = $rec2["フィールド2"];
}
print $rec["フィールド1"]." - ".$MK;
}
のような感じで表示してますが、もっと簡単に記述する方法はありませんか?
うまく説明することが出来ないのですが、理解していただいた方がいたら解説などをいれてお願いします。
前回の3の方の答えで合っています。
---------------------------------
SELECT
A.フィールド1 a_field,
B.フィールド2 b_field
FROM
テーブルA A,
テーブルB B
WHERE
A.フィールド2 = B.フィールド1
---------------------------------
$row['a_field']
$row['b_field']
前回これでBのデータしか出ないと仰っておられますが、テーブルの指定を間違えているのでは?
A.フィールド1の”.”の前はテーブルの指定ですので。
また、アスタリスクは極力使わない方がよろしいですよ。
SQLを変更しましょう。
select
テーブルA.フィールド1 as name,
テーブルB.フィールド2 as color,
from
テーブルA, テーブルB
where
テーブルA.フィールド2 = テーブルB.フィールド1
order by
テーブルA.フィールド1
あとはPHPで
$sql = ""; //先ほどのクエリ
$mysql_res = mysql_query( $sql, $conn );
while( $arr = mysql_fetch_array( $mysql_res ) ){
echo $arr["name"] . " - " . $arr["color"] . "\n";
}
これでいけます。
あと。これは条件があって
テーブルAのフィールド1に入っているデータが
テーブルBのフィールド2に入っていない場合等は考慮していません。
これをフォローする場合は、SQLの外部結合と呼ばれるのが必要になります。
( left outer join とか... )
外部結合については長くなる&上手く説明する自信が無いので、
私がお世話になったサイト
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_09.htm
を参考にしてみてください。
vector_xenonさんの言うとおりですが
ORACLEだと、厳しく言われる現場もあるのです。 つДT)
as は 必須ではないですが 結合した時は重複しなくても
「テーブル名.フィールド名は絶対」
というのが、長く付き合ってたルールなもので as つけちゃいます。