日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » SQL文内にSQL文を用いたページ

SQL文内にSQL文を用いたページ

ページ: 1

投稿者 投稿
会員
登録者: 7 2008
返信数: 2
初心者です。レベルの低い質問で申し訳ありません。

//↓以下、ソースです。

$sql = "SELECT * FROM tableA";

$result = mysql_query($sql);

$i = 0;
while ( $row = mysql_fetch_assoc($result) ) {

$id = $row['id'];
$name = $row['name'];
$category = $row['category'];
$tel = $row['tel'];
$fax = $row['fax'];

echo '<table>

<tr>
<td>id</td>
<td>' . $id . '</td>
</tr>

<tr>
<td>name</td>
<td>' . $name . '</td>
</tr>

<tr>
<td>category</td>
<td>' . $category . '</td>
</tr>

<tr>
<td>tel</td>
<td>' . $tel . '</td>
</tr>

<tr>
<td>fax</td>
<td>' . $fax . '</td>
</tr>';

++$i;

}

if ( $i == 0 ) echo '<p>データがありません</p>';


echo '</table>';


上記から得られる結果

+-----+------+----------+-----------+-----------+
| id | name | category | tel | fax |
+-----+------+----------+-----------+-----------+
| 01 | john | 1 | 2232-1232 | 2232-1235 |
+-----+------+----------+-----------+-----------+
| 02 | paul | 0 | 6233-1532 | 2632-1254 |
+-----+------+----------+-----------+-----------+
| 03 | jack | 1 | 7652-4262 | 4272-2435 |
+-----+------+----------+-----------+-----------+

を、別のテーブルと組み合わせて以下のような形にしたいです。

+-----+------+----------+-----------+-----------+
| id | name | category | tel | fax |
+-----+------+----------+-----------+-----------+
| 01 | john | student | 2232-1232 | 2232-1235 |
+-----+------+----------+-----------+-----------+
| 02 | paul | teacher | 6233-1532 | 2632-1254 |
+-----+------+----------+-----------+-----------+
| 03 | jack | student | 7652-4262 | 4272-2435 |
+-----+------+----------+-----------+-----------+

そこで、以下の通り複数の SQL 文を用いてみました。


$sql = "SELECT * FROM tableA";

$result = mysql_query($sql);

$i = 0;
while ( $row = mysql_fetch_assoc($result) ) {

$id = $row['id'];
$name = $row['name'];
$category = $row['category'];
$tel = $row['tel'];
$fax = $row['fax'];

echo '<table>

<tr>
<td>id</td>
<td>' . $id . '</td>
</tr>

<tr>
<td>name</td>
<td>' . $name . '</td>
</tr>

$sql = "SELECT * FROM tableB WHERE tableB.id = '$category'";

$result = mysql_query($sql);

$i = 0;
while ( $row = mysql_fetch_assoc($result) ) {

$catname = $row['catname'];

++$i;

}

if ( $i == 0 ) echo '<p>データがありません</p>';

<tr>
<td>category</td>
<td>' . $catname . '</td>
</tr>

<tr>
<td>tel</td>
<td>' . $tel . '</td>
</tr>

<tr>
<td>fax</td>
<td>' . $fax . '</td>
</tr>';

++$i;

}

if ( $i == 0 ) echo '<p>データがありません</p>';


echo '</table>';


が、得られるのは下記の通りです。・・・前述のように 3 行出てきません。


+-----+------+----------+-----------+-----------+
| id | name | category | tel | fax |
+-----+------+----------+-----------+-----------+
| 01 | john | student | 2232-1232 | 2232-1235 |
+-----+------+----------+-----------+-----------+


明らかに間違っているのは分かるのですが、どのように直してよいのか分か
らず、ご教授いただけませんでしょうか?

よろしくお願い致します。
管理者
登録者: 10 2005
返信数: 38
コードのインデントが崩れていて読み違いがあるかもしれないですがご了承ください.

SQLの実行結果を$rowに取り込んでいると思うのですが,
2種類の実行結果を同一の$rowに取り込んでいませんか?
会員
登録者: 10 2007
返信数: 71
 補足させて下さい。

 問題のソース中、2回目に出てくる
$result = mysql_query($sql);

$i = 0;
while ( $row = mysql_fetch_assoc($result) ) {
にある変数の名前「$result」を「$result2」等のように別の名前に変えて下さい。つまり
$result2 = mysql_query($sql);

$i = 0;
while ( $row = mysql_fetch_assoc($result2) ) {
のようにします。

 この例での$resultおよび$result2には、SQL実行結果まるごとのデータと、そのデータをどこまで読み込んだかが記録されていると思って下さい。
 この例ではtableAのレコードを1つずつ読み込んで出力するループの中で、別のtableBを読み込んでいます。
 この時tableBにおけるSQL実行の際にtableAの時と同じ変数$resultを使ってしまうと、tableAの情報が入っていたはずの$resultはtableBの情報に入れ替わってしまいます。
 そしてtableAの2つ目のレコードを読み込もうとした時には「(tableBが)もう次のレコードはありません」となってしまいます。

 話が長くなってしまいましたが、ELFさんがおっしゃっているように、同時にSQL実行結果を使用する場合はmysql_query()の返り値を入れる変数を別々にする必要があるということです。
 いかがでしょうか?。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » SQL文内にSQL文を用いたページ

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています