0

まとめ:

TABLE2 のデータを表示する場合、TABLE2 の TOPIC フィールドの数字を、TABLE1 の関連する TOPIC_NAME に置き換えます。

詳細:

同じ MySQL DB に 2 つのテーブルがあります。TABLE2 で使用されるように、TABLE1 から配列を設定するのに助けが必要です。問題があれば、私は PDO を使用しています。

UPDATE や INSERT はありません...数字の代わりに単語を表示するだけです。

TABLE2 の Foreach 表示ループを TABLE1 の Foreach ループ内にネストしますか?

また...

最初に TOPIC データを配列に入力してから、TABLE1 Foreach 表示ループを実行できますか?

また...

配列を作成せずに、TABLE2 のデータを使用して TABLE1 の TOPIC_NAME を参照することはできますか?

また...

???

============================

TABLE1はトピックのリストです。

TABLE1 構文:

TOPIC_NUM、TOPIC_NAME

TABLE1 のサンプル レコード:

1,トピック1

2,トピック2

等...

============================

TABLE2は、個人と関連データのリストです。

TABLE2 構文:

ID、名前、州、トピック、年

TABLE2 のサンプル レコード:

1、ジョン・スミス、マサチューセッツ州、2005 年 2 月

2、ジェーン ドウ、アリゾナ州、2009 年 1 月

等...

============================

参考までに: 上記のサンプル レコードでは、州の省略形の後の数字がトピックです。

これが私のコードです:

<?php 

try {

    $db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $db->exec("SET CHARACTER SET utf8");


// TABLE1
$tablename1 = 'topics';
$topics_col1 = 'TOPIC_NUM';
$topics_col2 = 'TOPIC_NAME';

// TABLE2
$tablename2 = 'people';
$items_col1 = 'NAME';
$items_col2 = 'STATE';
$items_col3 = 'TOPIC';
$items_col4 = 'YEAR';


$items_q = "SELECT $items_col1, $items_col2, $items_col3 FROM $tablename2";
$items = $db->query($items_q);

foreach ($items as $items_row) {
?>

<h2><?php 
/*


THIS IS WHERE THE TOPIC_NAME FROM TABLE1 SHOULD DISPLAY


*/
?></h2>

<p>
<?php echo $items_row[$items_col1];?>
<br />
<?php echo $items_row[$items_col2];?>
<br />
<?php echo $items_row[$items_col3];?>
<br />
<?php echo $items_row[$items_col4];?>
</p>

<?php   
} // end FOREACH

    $db = null; // close the database connection

} // end TRY
catch(PDOException $e) {
    echo '<span class="error">ERROR:</span><br />'.$e->getMessage() . "<br />";
    die();
} // end CATCH

?>
4

2 に答える 2

0

今後の参考のために、このスクリプトの最終バージョンを次に示します。「ドット」メソッドを使用したクエリの代替コーディング方法を示すコメント付きセクションを含めました。

このスクリプトを (両方の方法を使用して) テストしたところ、完全に機能します。

<?php 

try {

    $db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $db->exec("SET CHARACTER SET utf8");


// TABLE1
$tablename1 = 'topics';
$topics_col1 = 'TOPIC_NUM';
$topics_col2 = 'TOPIC_NAME';

// TABLE2
$tablename2 = 'people';
$items_col1 = 'NAME';
$items_col2 = 'STATE';
$items_col3 = 'TOPIC';
$items_col4 = 'YEAR';


$items_q = "SELECT $items_col1, $items_col2, $items_col3, $items_col4, $topics_col2 
FROM $tablename2 
JOIN $tablename1 on ($items_col3 = $topics_col1)";

/* ALTERNATE METHOD FOR QUERY

(*No need for all of the vars above using this method.)
$items_q = "SELECT $tablename2.NAME, $tablename2.STATE, $tablename2.TOPIC, $tablename2.YEAR, $tablename1.TOPIC_NAME 
FROM $tablename2 
INNER JOIN $tablename1 on ($tablename2.TOPIC = $tablename1.TOPIC_NUM)";

*/

$items = $db->query($items_q);

foreach ($items as $items_row) {
?>

<h2><?php echo $items_row[$topics_col2];?></h2>

<p>
<?php echo $items_row[$items_col1];?>
<br />
<?php echo $items_row[$items_col2];?>
<br />
<?php echo $items_row[$items_col3];?>
<br />
<?php echo $items_row[$items_col4];?>
</p>

<?php   
} // end FOREACH

    $db = null; // close the database connection

} // end TRY
catch(PDOException $e) {
    echo '<span class="error">ERROR:</span><br />'.$e->getMessage() . "<br />";
    die();
} // end CATCH

?>
于 2013-01-08T03:11:01.630 に答える
0

単に使用するINNER JOIN

SELECT  a.ID, a.NAME, a.STATE, b.TOPIC_NAME , a.YEAR
FROM    table2 a
        INNER JOIN table1 b
            ON  a.topic = b.topic_num
于 2013-01-06T08:22:16.773 に答える