Mysql 使用父查询结果的子查询

Mysql 使用父查询结果的子查询,mysql,Mysql,更新现在通过回复中提供的帮助解决了付款查询。草莓提供的答案非常接近。它只需要编辑一下,因为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('

更新现在通过回复中提供的帮助解决了付款查询。草莓提供的答案非常接近。它只需要编辑一下,因为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
我在下面的原始查询中解决了这个问题,一切正常

原创帖子

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

在数据库中,我在wp_usermeta.meta_值中有许多条目,例如:
meta\u值=\u um\u组\u 47859\u价格

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

所以我希望能够使用类似的工具来查询精确匹配:
比如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'
有没有一种方法可以修改最后一个内部联接以包含类似:
WHERE的内容
wp\u usermeta.meta\u value='\u um\u groups\u 47859\u price'
其中47859将是wp\u um\u groups\u members.group\u id

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_Posteta)时,我更喜欢这种语法

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

(严格地说,这更类似于使用左连接而不是内部连接,根据您的示例)

显示一些示例数据,您想要获得什么,以及您正在获得什么(说明您所说的“未正确匹配的结果”)您是否只想添加一个条件
wp_usermeta.meta_value=concat(“Uu-um-Uu组”,wp-um-Uu组成员。组id,“Uu-price”)
?谢谢你。这几乎解决了。我注意到你的第一个查询需要一个小的调整(meta-Uu值应该是meta-Uu键)在最后一行。我已经用你在我的问题中的答案更新了。这是两个独立的查询吗?我如何才能将它们合并为一个查询?我想我只是在复制你的查询声音,就像我想做的一样!哈哈!一切都正常!谢谢!