0

概括:

当显示来自 TABLE2 的数据时,将 TABLE2 的 TOPIC 字段中的数字替换为来自 TABLE1 的相关 TOPIC_NAME。

细节:

我在同一个 MySQL 数据库中有 2 个表。我需要帮助从 TABLE1 填充数组以供 TABLE2 使用。如果重要的话,我正在使用 PDO。

没有更新或插入......只显示单词而不是数字。

我是否将 TABLE2 Foreach 显示循环嵌套在 TABLE1 的 Foreach 循环中?

或者...

我可以先用 TOPIC 数据填充一个数组,然后执行 TABLE1 Foreach 显示循环吗?

或者...

我可以使用 TABLE2 中的数据引用 TABLE1 中的 TOPIC_NAME 而不创建数组吗?

或者...

???

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

TABLE1是主题列表。

表 1 语法:

TOPIC_NUM,TOPIC_NAME

来自表 1 的样本记录:

1、主题1

2、主题2

ETC...

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

表 2是个人和相关数据的列表。

表 2 语法:

ID,姓名,州,主题,年份

来自表 2 的样本记录:

1,约翰·史密斯,MA,2,2005

2,Jane Doe,亚利桑那州,2009 年 1 月

ETC...

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

仅供参考:在上面的示例记录中,州缩写后面的数字是 TOPIC。

这是我的代码:

<?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

只需使用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 回答
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 回答