0

更新现在在回复中提供的帮助下解决了支付查询。草莓提供的答案非常接近。它只需要稍微编辑一下,因为 WHERE 子句有我在原始查询中提供的冗余和不正确的语句。这是正确的,稍作修改的查询:

SELECT ux.user_id
     , ux.meta_value pay
  FROM wp_um_groups_members m
  Join wp_usermeta ux 
    ON m.user_id1 = ux.user_id
 WHERE ux.meta_key = CONCAT('_um_groups_', m.group_id,'_price')

这与我的“支付”字段的以下数据相匹配:

From up_usermeta:

umeta_id | user_id | meta_key               |    meta_value
===========================================================
622680   | 5989    | _um_groups_47652_price |    500


From wp_um_groups_members:

id   | group_id | user_id1 | user_id2 | status   | role   | invites | time_stamp          | date_joined
===============================================================================================================
187  | 47682    | 5989     | 3        | approved | member | 1       | 2020-02-15 10:59:08 | 2020-02-15 10:59:08

我通过下面的原始查询完成了该操作,一切正常。

原帖

我敢肯定,我让这件事变得比需要的困难得多。下面是流程图和查询。当我添加“支付”子查询时,我收到了不正确匹配的结果。如果我删除“支付”子查询,它可以正常工作(除了没有支付)。

查询流程图

在数据库中,我在 wp_usermeta.meta_value 中有许多条目,例如: meta_value = _um_groups_47859_price

在该示例中,数字 47859 等于 wp_um_groups_members.group_id 的值

因此,我希望能够使用类似于以下内容的方式查询该完全匹配:LIKE CONCAT('%', wp_um_groups_members.group_id ,'%')

这似乎也不起作用。

这是我当前的查询:

SELECT 
  wp_um_groups_members.group_id AS ID, wp_posts.post_title AS Gig, Location.Location, Type.`Event Type`, wp_users.display_name AS Player, Date.Date, Pay.Pay
FROM
  wp_um_groups_members
Inner Join wp_posts ON 
  wp_um_groups_members.group_id = wp_posts.ID
Inner Join (SELECT 
  wp_postmeta.post_id, wp_postmeta.meta_value AS Location
FROM
  wp_postmeta
WHERE
  wp_postmeta.meta_key = '_um_groups_event_location'
) Location ON 
  Location.post_id = wp_posts.ID
Inner Join (SELECT 
  wp_postmeta.post_id, wp_postmeta.meta_value AS `Event Type`
FROM
  wp_postmeta
WHERE
  wp_postmeta.meta_key = '_um_groups_event_type'
) Type ON 
  Type.post_id = wp_posts.ID
Inner Join wp_users ON 
  wp_users.ID = wp_um_groups_members.user_id1
Inner Join (SELECT 
  wp_postmeta.post_id, wp_postmeta.meta_value AS Date
FROM
  wp_postmeta
WHERE
  wp_postmeta.meta_key = '_um_groups_event_start'
) Date ON 
  Date.post_id = wp_posts.ID
Inner Join (SELECT 
  wp_usermeta.user_id, wp_usermeta.meta_value AS Pay
FROM
  wp_um_groups_members
Inner Join wp_usermeta ON 
  wp_um_groups_members.user_id1 = wp_usermeta.user_id
WHERE
  wp_usermeta.meta_key like '%price'
) Pay ON 
  Pay.user_id = wp_users.ID
WHERE
  wp_um_groups_members.status = 'approved'

有没有办法修改最后一个 Inner Join 以包含以下内容:WHERE wp_usermeta.meta_value = '_um_groups_47859_price'其中 47859 将是 wp_um_groups_members.group_id?

4

1 回答 1

1
SELECT ux.user_id
     , ux.meta_value pay
  FROM wp_um_groups_members m
  Join wp_usermeta ux 
    ON m.user_id1 = ux.user_id
 WHERE ux.meta_key LIKE '%price'
   AND ux.meta_value = CONCAT('_um_groups_', m.group_id,'_price')

顺便说一句,虽然没有性能优势,但在使用 EAV(如 wp_postmeta)时,我更喜欢这种语法......

SELECT post_id
     , MAX(CASE WHEN meta_key = '_um_groups_event_location' THEN meta_value END) location
     , MAX(CASE WHEN meta_key = '_um_groups_event_type' THEN meta_value END) event_type
     , MAX(CASE WHEN meta_key = '_um_groups_event_start' THEN meta_value END) date
     , MAX(CASE WHEN meta_key = '_um_groups_event_type' THEN meta_value END) event_type
  FROM wp_postmeta
 GROUP
     BY post_id

(严格来说,这更类似于使用 LEFT JOIN 而不是 INNER JOIN,根据您的示例)

于 2020-04-27T07:09:18.823 回答