【问题标题】:Ordering a list of WordPress users by array value按数组值排序 WordPress 用户列表
【发布时间】:2017-01-23 11:30:30
【问题描述】:

假设我们有一个用户列表,我们正试图将您与其中一个匹配。你有一个包含 10 件事的清单,你必须选择你喜欢的那些。

说:巧克力、帆船、跑步、骑自行车、NetFlix 等等……

根据您选中的复选框,它将其作为数组或字符串存储在数据库中(我可以灵活选择)。

所以我现在需要按照勾选了与您类似的复选框最多的用户列表来排序。

简单地说,如果我选择“巧克力、航海和跑步”,而有人刚刚吃了“巧克力”,那么他们将比我选择的完全相同 3 的人更靠后。

在尝试使用 pre_user_query 操作钩子破解 WP_User_Query 时,我有以下行:

$query->query_orderby = 'ORDER BY FIND_IN_SET("chocolate", wp_usermeta.meta_value) > 0 ASC';

...但没有运气。

我有一个用户meta_key 称为babud_likes,并且该数组存储在该键的元值中。

【问题讨论】:

    标签: php mysql wordpress sql-order-by


    【解决方案1】:

    也许您可以将数据存储为二进制字符串?例如,如果我们有巧克力、糖果、糖果、足球等类别,我们会将这些类别中的每一个表示为字符串中已知位置的单个位。例如,对于喜欢 Chocolate、Candy 和 Football 的人,我们可以使用结构 (Chocolate,Sweets,Candy,Football) 编写:

    1011
    

    或者对于喜欢巧克力、糖果和足球的人,我们可以写

    1101
    

    假设我们编写了一个简单的 SQL 查询 (SELECT id, likes FROM users WHERE id=1 OR id=2)。然后我们可以获取两个likes 值并执行按位与,比较字符串中的每个位,如果两个位都匹配则返回 1。所以对于我们的两个示例用户,我们会这样做;

    $result = 1011 & 1101;
    // Outputs '1001'
    

    从结果我们可以推断出两个人都喜欢巧克力和足球,因为第一个位置的 1 表示巧克力,而第四个位置的 1 表示足球。

    在将其集成到 Wordpress 方面,我会考虑为用户使用creating an all new table - 最终您将遇到仅使用默认 Wordpress 用户表执行此操作的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多