Mysql 使用父查询结果的子查询
更新现在通过回复中提供的帮助解决了付款查询。草莓提供的答案非常接近。它只需要编辑一下,因为WHERE子句有一个冗余和不正确的语句,这是我在原始查询中提供的。以下是正确的、稍加修改的查询: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('
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键)在最后一行。我已经用你在我的问题中的答案更新了。这是两个独立的查询吗?我如何才能将它们合并为一个查询?我想我只是在复制你的查询声音,就像我想做的一样!哈哈!一切都正常!谢谢!