【问题标题】:Updating meta_value adding an associative array to those that already exist更新 meta_value 将关联数组添加到已经存在的数组
【发布时间】:2016-06-16 14:48:49
【问题描述】:

我要做的是优化在我的 wp_postmeta 表中存储数据的方式。

我需要保存多个帖子之间的关系,我的开始情况是这样的:

add_post_meta($parent_id, 'post_child', $child_id);

这样我需要为每个关系使用一个数据库行。

考虑到同一个父级可以关联到多个子级,我试图弄清楚什么可能是一个好的数组配置,我得到了这样的东西(但我仍然不确定是最好的方法) :

array(
    array(
        parent => 121,
        child => 122
    ),
    array(
        parent => 121,
        child => 122
    ),
    array(
        parent => 121,
        child => 123
    ),
    ...
);

然后,我尝试了以下代码:

if ($post_relations = get_post_meta($book_id, 'post_relations', true)) {

    $post_relations[] = array("parent" => $parent_id, "child" => $child_id);

    update_post_meta($book_id, 'post_relations', $post_relations);

} else {

    $post_relations[] = array("parent" => $parent_id, "child" => $child_id);

    add_post_meta($book_id, 'post_relations', $post_relations);

}

但我在 meta_value 字段中得到的结果似乎与我期望的结果不同:

a:2:{
i:0;a:2:{s:6:"parent";i:1;s:5:"child";i:510;}i:1;a:2:{s:6:"parent";i:510;s:5:"child";i:511;}
}

【问题讨论】:

  • 您没有显示update_post_metaadd_post_meta 的代码,这似乎是有问题的功能。
  • 我不明白你的意思,它们是 Wordpress 函数...我应该显示哪个代码?
  • 抱歉,我不是 Wordpress 专家。我看了add_post_meta documentation。你似乎正确地调用它。您显示的结果似乎有一个 id 为 1 的父级和一个 id 为 510 的子级,然后是另一个 id 为 510 的父级和一个 id 为 511 的子级。也许您应该将您的预期结果添加到您的问题中?
  • 我期望的结果是您可以在我的帖子中看到的第二个代码块的数组。顺便说一句,在阅读了您的评论后,我再次将我的预期结果与我在数据库中获得的数组进行了比较,我开始认为最终结果是正确的......现在我应该明白如果它也方便!

标签: php arrays wordpress post-meta


【解决方案1】:

WordPress 函数 update_post_meta()add_post_meta() 都需要可序列化的数据;

update_post_meta ( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' )

$meta_value非标量时必须是可序列化的

update_post_meta()

它在数据库中看起来像这样,因为那些函数serialize() 是您传递给它的数组。

因此,如果您在get_post_meta() 函数之外访问数据,则必须unserialize() 数据。

【讨论】:

    【解决方案2】:

    我认为您应该将关系保存为每个帖子元一个关系 - 将关系保存在数组中会使数据库查询变得非常困难。

    因此,要么将您的关系保存为即 post_relations_0、post_relations_1 等,或者更好的是,如果您打算进行一些查询,请将这些关系保存在单独的表中。

    【讨论】:

    • 将关系保存为每个帖子元一个关系我想这将是最简单的解决方案,原因是我已经在做并且对我来说工作正常。我唯一担心的是,如果我要保存大量的关系,那么最终最好的性能解决方案是什么?许多 db 行包含单个值还是更少的 db 行包含大量值?
    • 如前所述,查询数组中的值会很困难——最好的选择是每一项一行。我会使用一个单独的表,其中包含 id、parent_id、child_id 列。这样您就可以轻松查询所需的任何内容。
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2016-10-03
    • 2020-12-08
    • 2012-01-23
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多