概要
当显示TABLE2中的数据时,将TABLE2的TOPIC字段中的数字替换为TABLE1中关联的TOPIC_NAME。
详情:
我在同一个MySQL DB中有2个表。我需要帮助从TABLE1填充数组以供TABLE2使用。如果重要,我正在使用PDO。
没有更新或插入......只显示单词而不是数字。
我是否将TABLE2 Foreach显示循环嵌套在TABLE1的Foreach循环中?
...或
我可以首先使用TOPIC数据填充数组,然后执行TABLE1 Foreach显示循环吗?
...或
我可以使用TABLE2中的数据从TABLE1引用TOPIC_NAME而无需创建数组吗?
...或
???
============================
TABLE1 是一个主题列表。
TABLE1语法:
TOPIC_NUM,TOPIC_NAME
TABLE1的样本记录:
1,TOPIC1
2,TOPIC2
等...
============================
TABLE2 是个人和相关数据的列表。
TABLE2语法:
ID,名称,状态,TOPIC,YEAR
TABLE2的样本记录:
1,John Smith,MA,2,2005
2,Jane Doe,AZ,1,2009
等...
============================
仅供参考:在上面的样本记录中,州名缩写后的数字是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
?>
答案 0 :(得分: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
答案 1 :(得分: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
?>