【问题标题】:SQL query – how to get value from array?SQL查询——如何从数组中获取值?
【发布时间】:2015-09-30 08:40:43
【问题描述】:

我一直在使用以下 SQL 查询从我的 WordPress 用户配置文件中输出值。

$divisions = $wpdb->get_col("
    SELECT Distinct(c.meta_value) 
    FROM $wpdb->usermeta AS r  
    INNER JOIN $wpdb->usermeta AS y
      ON r.user_id = y.user_id
    INNER JOIN $wpdb->usermeta AS g
      ON r.user_id = g.user_id
    INNER JOIN $wpdb->usermeta AS re
      ON r.user_id = re.user_id
    INNER JOIN $wpdb->usermeta AS c
      ON r.user_id = c.user_id
    WHERE r.meta_value LIKE '%subscriber%'
    AND y.meta_key = 'CERTIFIED_DISPLAY'
    AND y.meta_value NOT LIKE 'no'
    AND g.meta_key = 'CERTIFIED_CATEGORY'
    AND g.meta_value = '$category'
    AND re.meta_key = 'dbem_region'
    AND re.meta_value = '$region'
    AND c.meta_key = 'dbem_school_division'
    ORDER BY c.meta_value ASC
    ");

在我不得不将其中一个元键 ('CERTIFIED_CATEGORY') 更改为数组之前,它工作得很好。该特定字段曾经是一个具有单个值的选择框,然后我将其更改为一个复选框列表,它是一个值数组。这是我现在需要修复的查询部分:

AND g.meta_key = 'CERTIFIED_CATEGORY'
AND g.meta_value = '$category'

$category 是数组中的值之一。我以为我可以将“=”更改为“LIKE”,但它不起作用:

AND g.meta_key = 'CERTIFIED_CATEGORY'
AND g.meta_value LIKE '$category'

我也试过'IN',但没有运气。我该怎么做?

【问题讨论】:

  • 另外:由于我从单个值切换到数组,并非所有用户都更新了他们的配置文件 - 因此该键的某些值仍存储为单个值。只有最近更新了他们的个人资料的用户才会有一个数组。上述查询仅适用于具有“单值”的用户。我需要查询适用于这两种情况。我以为“LIKE”会那样做……

标签: php mysql arrays wordpress


【解决方案1】:

我认为您可以为此使用 mysql_fetch_array 命令。

查看以下链接:PHP.NET

在上面的链接中也有一个例子。希望这会有所帮助。

【讨论】:

  • 谢谢。我不确定如何使用它...我需要重新执行整个查询,还是可以将其添加到其中?我不精通 SQL 查询——我设法将我当前的查询从论坛和谷歌拼凑在一起!
【解决方案2】:

看来我需要做的就是改变这一行:

AND g.meta_value = '$category'

到这里:

AND g.meta_value LIKE '%$category%'

我已经尝试过使用 LIKE,但我没有在变量周围使用 % 符号。显然 % 是必要的,因为现在它可以工作了。希望我知道更多来解释为什么

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多