代码之家  ›  专栏  ›  技术社区  ›  Antonios Tsimourtos

获取元键是术语序列化数组的用户

  •  0
  • Antonios Tsimourtos  · 技术社区  · 6 年前

    我有一个用户列表,我只想通过使用适当的元查询参数获取这些用户:

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

    元密钥 : 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_查询的结构应该如何,以便获取用户 喜欢 “类别 26个 ?问题是我想不出最好的办法。

    以下论点似乎不起作用:

        [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
    )
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   gadz82    6 年前

    我认为最好的、性能更好的解决方案是在用户和categories id之间创建一个连接表。如果这样做是不可能的,您应该取消序列化并将数组检索到php中,然后在某种映射(根据您的需要构造)之后在其中进行搜索。

        2
  •  0
  •   marc_s Anurag    5 年前

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

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

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