Php 将元表与主表合并
我有两个表,一个主表,一个支持主表,非常类似于wordpress的posts和posts 主表: 身份证 标题 内容 元表: 身份证 项目编号 钥匙 价值观 我的目标是,最终,用主表中的数据创建一个数组,并与元表合并。例如:Php 将元表与主表合并,php,sql,pdo,Php,Sql,Pdo,我有两个表,一个主表,一个支持主表,非常类似于wordpress的posts和posts 主表: 身份证 标题 内容 元表: 身份证 项目编号 钥匙 价值观 我的目标是,最终,用主表中的数据创建一个数组,并与元表合并。例如: $data = array( array( 'id' => 1, 'title' => 'one', 'content' => 'content one', 'template' =&
$data = array(
array(
'id' => 1,
'title' => 'one',
'content' => 'content one',
'template' => 'single',
'group' => 'top'
),
array(
'id' => 2,
'title' => 'two',
'content' => 'content two',
'template' => 'page',
'group' => 'bottom'
)
);
实现这一目标的最佳方式是什么
我使用PDO连接到我的数据库,我现在做的是,我首先查询第一个表上的数据,然后针对每个结果,我查询元表,我为此使用准备好的语句,因为它被认为是快速的,但即使如此,它也会损害我脚本的性能
谢谢您而不是为第一次查询的每个结果查询元表 您应该从第一个结果中提取ID:
$rows = q('SELECT * FROM posts');
$byIds = [];
foreach ($rows as &$row)
{
$byIds[$row['id']] =& $row;
}
然后运行第二个查询:
$rows2 = q('SELECT * FROM posts_meta WHERE item_id IN (' . implode(',', array_keys($byIds)) . ')');
然后在PHP中循环结果并与第一个查询结果合并
foreach ($rows2 as $row2)
{
$byIds[$row2['item_id']][$row2['key']] = $row2['value'];
}
您现在已将合并结果保存在$rows变量中:
var_dump($rows);
这样,您将只有2个db请求
请注意,我已经使用$byid作为引用数组,所以我不必在第二个循环中搜索具有特定id的行。这样就保留了$行中元素的顺序。而不是为第一次查询的每个结果查询元表 您应该从第一个结果中提取ID:
$rows = q('SELECT * FROM posts');
$byIds = [];
foreach ($rows as &$row)
{
$byIds[$row['id']] =& $row;
}
然后运行第二个查询:
$rows2 = q('SELECT * FROM posts_meta WHERE item_id IN (' . implode(',', array_keys($byIds)) . ')');
然后在PHP中循环结果并与第一个查询结果合并
foreach ($rows2 as $row2)
{
$byIds[$row2['item_id']][$row2['key']] = $row2['value'];
}
您现在已将合并结果保存在$rows变量中:
var_dump($rows);
这样,您将只有2个db请求
请注意,我已经使用$byid作为引用数组,所以我不必在第二个循环中搜索具有特定id的行。这样可以保留$rows中元素的顺序。这听起来是个不错的解决方案,您建议我如何合并?我现在有了一个包含元数据的数组,想不出一种有效的方法来合并这两种数据,谢谢你们的回答。你可以使用引用来加速。这听起来是一个很好的解决方案,你建议我如何合并?我现在有了一个包含元数据的数组,想不出一种有效的方法来合并这两种数据,谢谢你们的回答。您可以使用引用来加速。