Php 将元表与主表合并

Php 将元表与主表合并,php,sql,pdo,Php,Sql,Pdo,我有两个表,一个主表,一个支持主表,非常类似于wordpress的posts和posts 主表: 身份证 标题 内容 元表: 身份证 项目编号 钥匙 价值观 我的目标是,最终,用主表中的数据创建一个数组,并与元表合并。例如: $data = array( array( 'id' => 1, 'title' => 'one', 'content' => 'content one', 'template' =&

我有两个表,一个主表,一个支持主表,非常类似于wordpress的posts和posts

主表:

身份证 标题 内容

元表:

身份证 项目编号 钥匙 价值观

我的目标是,最终,用主表中的数据创建一个数组,并与元表合并。例如:

$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中元素的顺序。

这听起来是个不错的解决方案,您建议我如何合并?我现在有了一个包含元数据的数组,想不出一种有效的方法来合并这两种数据,谢谢你们的回答。你可以使用引用来加速。这听起来是一个很好的解决方案,你建议我如何合并?我现在有了一个包含元数据的数组,想不出一种有效的方法来合并这两种数据,谢谢你们的回答。您可以使用引用来加速。