【问题标题】:Get users where meta key is a serialized array of terms获取元键是术语序列化数组的用户
【发布时间】:2018-08-27 14:05:32
【问题描述】:

我有一个用户列表,我只想通过使用适当的 meta_query 参数来获取:

用户可以选择/选择最喜欢的类别,并且该数据保存为元数据,更具体地说,保存为序列化数组。

元密钥favorite-categories

元值a:9:{i:0;s:1:"7";i:1;s:2:"10";i:2;s:1:"8";i:3;s:2:"21";i:4;s:2:"22";i:5;s:2:"24";i:6;s:2:"28";i:7;s:2:"25";i:8;s:2:"26";}

上面的meta_value表示特定用户喜欢以下喜欢的类别(词条ID):

Array
(
    [0] => 7
    [1] => 10
    [2] => 8
    [3] => 21
    [4] => 22
    [5] => 24
    [6] => 28
    [7] => 25
    [8] => 26
)

应该如何构建我的 meta_query 以获取“喜欢”类别 726 的用户?问题是我想不出最好的方法。

下面的论点似乎不起作用:

    [key] => favorite-categories
    [value] => Array
        (
            [0] => 43
            [1] => 36
            [2] => 41
            [3] => 42
            [4] => 40
            [5] => 30
            [6] => 8
            [7] => 9
            [8] => 10
            [9] => 29
            [10] => 7
            [11] => 20
            [12] => 19
            [13] => 22
            [14] => 18
            [15] => 21
            [16] => 26
            [17] => 25
            [18] => 28
            [19] => 27
        )

    [compare] => IN
    [type] => text
)

【问题讨论】:

  • 据我所知,WP 查询机制不处理序列化字符串中的搜索(即使是一般的 SQL)。您应该考虑不同的存储解决方案。也许你会使用一个简单的字符串,用逗号作为分隔符,或者为每个喜欢使用一行。
  • 没错。 mysql 怎么可能读取 php 序列化对象?或许可以使用自定义分类法。

标签: php wordpress


【解决方案1】:

由于无法更改存储过程,我解决此问题的方法如下:

$arguments = array(
    array(
    "key" => 'favorite-categories',
    "value" => ":\"7\"",
    "compare" => "LIKE",
    ),
 array(
        "key" => 'favorite-categories',
        "value" => ":\"13\"",
        "compare" => "LIKE",
        ),

这实际上意味着搜索序列化数组LIKE :"7" AND LIKE :"13"

【讨论】:

    【解决方案2】:

    我认为最好和更高效的解决方案是在用户和类别 ID 之间创建一个连接表。假设这种方式不可行,您应该将数组反序列化并检索到 PHP 中,并在某种映射后在其中搜索(根据您的需要进行结构化)。

    【讨论】:

      猜你喜欢
      • 2015-05-26
      • 1970-01-01
      • 2016-03-04
      • 2014-10-26
      • 2012-06-16
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多