gpt4 book ai didi

mysql - 当值为 'grade' 或不存在时获取结果

转载 作者:行者123 更新时间:2023-11-30 22:14:59 24 4
gpt4 key购买 nike

我有一个 wordpress 网站,用于存储学生在各种类(class)中的成绩(来自网站上的测验)。我正在尝试创建一个查询,该查询将提取特定组(使用 buddypress 组)中所有学生的所有类(class)以及学生在每节课中的成绩。

我创建了这个查询:

SELECT u.display_name, p.post_title, cm.meta_value
FROM wp_users u
JOIN wp_bp_groups_members gm
ON u.ID = gm.user_id
JOIN wp_comments c
ON u.ID = c.user_id
JOIN wp_commentmeta cm
ON c.comment_ID = cm.comment_id
JOIN (SELECT * FROM wp_posts WHERE post_type LIKE 'lesson') p
ON c.comment_post_id = p.ID
WHERE gm.group_id = 4 AND cm.meta_key LIKE 'grade'

这目前返回一组中所有学生在他们尝试测试的类(class)中的所有成绩。但是,它不会返回他们尚未尝试测试的任何类(class),我仍然需要这些类(class)。

需要说明的是:类(class)是帖子,成绩是元键为“成绩”的记录中的元值。这些存储为评论和 comment_meta。

我希望这一切都清楚,您可以提供帮助。谢谢。

在 Ollie Jones 的帮助下我做了这个:

SELECT u.display_name, p.post_title, IFNULL(cm.meta_value,'--nothing--') grade
FROM wp_users u
JOIN wp_comments c
LEFT JOIN wp_commentmeta cm
ON c.comment_ID = cm.comment_id AND cm.meta_key = 'grade'
JOIN wp_bp_groups_members gm
ON u.ID = gm.user_id
JOIN wp_posts p
ON c.comment_post_id = p.ID
WHERE gm.group_id = 4 AND p.post_type LIKE 'lesson'

这几乎可以工作,但会返回所有学生的成绩,而不仅仅是组中的成绩(尽管它只给出组中学生的一个名字)。

最佳答案

这是熟悉的键/值存储问题,由 commentmetapostsmetausermeta 提出。当您JOIN 两个表而左边的表可能没有对应的行时,您需要使用LEFT JOIN。当左边是key/value表时,需要相应调整ON条件。最后,当您 LEFT JOIN 两个表并且其中没有匹配的行时,您将返回这些列的 NULL,因此您必须考虑到这一点。

所以这种 SQL 模式将为您解决问题

SELECT whatever, IFNULL(cm.meta_value,'--nothing--') grade
FROM whatever
LEFT JOIN wp_comments c ON whatever.id = c.user_id
LEFT JOIN wp_commentmeta cm ON c.comment_id = cm.comment_id
AND cm.meta_key = 'grade'
JOIN whatever

关于mysql - 当值为 'grade' 或不存在时获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com