1

我要做的是优化在我的 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;}
}
4

2 回答 2

0

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

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

于 2016-06-16T21:51:06.057 回答
0

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()数据。

于 2016-06-16T21:39:59.153 回答