我有两个站点带有单独的Wordpress实例。一个正在获取WooCommerce的过程中,另一个正在使现有用户具有设置的组来访问课程。我将来可以通过商店出售这些课程。我要寻找的答案与Wordpress本身无关,但与SQL无关。我知道大多数数据是如何从一个表中获取的,或者通过轻微的联接而获取的,但对于最后一步却没有。请考虑以下内容:
用户表(多余,但为了澄清):
╔═════╦══════╗
║ UID ║ NAME ║
╠═════╬══════╣
║ 1 ║ Bob ║
║ 2 ║ Tom ║
║ 3 ║ Joe ║
║ … ║ … ║
╚═════╩══════╝
课程表:
╔═════╦═════════════════════╗
║ CID ║ COURSE ║
╠═════╬═════════════════════╣
║ 1 ║ Introductory Course ║
║ 2 ║ Trial Course ║
║ 3 ║ Actual Course 1 ║
║ … ║ … ║
╚═════╩═════════════════════╝
连接表,将用户从n到n连接到课程:
╔═════╦═════╗
║ UID ║ CID ║
╠═════╬═════╣
║ 1 ║ 1 ║
║ 2 ║ 1 ║
║ 2 ║ 2 ║
║ 3 ║ 1 ║
║ 3 ║ 2 ║
║ 3 ║ 3 ║
║ … ║ … ║
╚═════╩═════╝
不会让您查找人际关系,所以:
入门课程不授予任何费用,试用课程不提供任何实际课程的折扣。如果有人已经有实际的课程,那么过去就已经给予了折扣。因此,在查询结果中,我仅查找具有试用课程,有选择的入门课程但没有其他课程的用户的用户ID:
╔════╗
║ ID ║
╠════╣
║ 1 ║
║ 2 ║
╚════╝
显然,我不能仅仅从结果中排除与入门课程或试用课程不匹配的行,因为这仍然会为我提供可能附加了其他课程的用户ID。
禁不住以为我缺少了一个显然简单的解决方案。
答案 0 :(得分:0)
我想你想要
select j.uid
from junction j join
course c
on j.cid = c.cid
group by j.uid
having sum( c.course = 'Trial Course' ) > 0 and
sum( c.course not in ('Trial Course', 'Introductory Course') ) = 0;
第一个having
条件检查用户是否具有试用课程。第二,他们没有非试用或入门课程。
答案 1 :(得分:0)
据我了解,您想要的UID不在3实际课程1中 而且我认为4是实际课程2,依此类推。
但是根据大学的不同,通常会针对不同的类别提供不同的入门课程和试用课程。
所以我认为您必须重新考虑您的策略,或者让我们看一看如何管理此策略
SELECT DISTINCT UID FROM junction WHERE UID NOT IN (SELECT UID FROM junction WHERE CID >= 3)
| UID | | --: | | 1 | | 2 |
db <>提琴here