Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一个MySQL表中的数据将在另一个表中使用_Php_Mysql_Select_Inner Join - Fatal编程技术网

Php 一个MySQL表中的数据将在另一个表中使用

Php 一个MySQL表中的数据将在另一个表中使用,php,mysql,select,inner-join,Php,Mysql,Select,Inner Join,摘要: 当显示表2中的数据时,用表1中的相关主题名称替换表2中主题字段中的数字 详细信息: 我在同一个MySQL数据库中有两个表。我需要帮助填充表1中的数组以供表2使用。如果重要的话,我正在使用PDO 没有更新或插入。。。只显示单词而不是数字 我是否将TABLE2的Foreach显示循环嵌套在TABLE1的Foreach循环中 或者 我是否可以先用主题数据填充数组,然后执行TABLE1 Foreach显示循环 或者 我可以使用表2中的数据引用表1中的主题名称而不创建数组吗 或者 =======

摘要:

当显示表2中的数据时,用表1中的相关主题名称替换表2中主题字段中的数字

详细信息:

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

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

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

或者

我是否可以先用主题数据填充数组,然后执行TABLE1 Foreach显示循环

或者

我可以使用表2中的数据引用表1中的主题名称而不创建数组吗

或者

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

表1是主题列表

表1语法:

主题编号,主题名称

表1中的样本记录:

1、专题1

主题2

等等

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

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

表2语法:

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

表2中的样本记录:

约翰·史密斯,马萨诸塞州,邮编22005

亚利桑那州无名女子2号,邮编12009

等等

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

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

这是我的密码:

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

?>






只需使用
内部连接

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

为供将来参考,以下是此脚本的最终版本。我已经包括了一个注释部分,其中显示了使用“点”方法查询的替代编码方法

我已经测试了这个脚本(使用这两种方法),它的功能非常好

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

?>