gpt4 book ai didi

mysql - 如何使用 Zend SELECT NOT IN 并消除匹配行

转载 作者:行者123 更新时间:2023-11-30 23:12:25 25 4
gpt4 key购买 nike

这是我正在尝试做的事情。我有一张 table ,上面有奖牌。有一个 user_id 列和一个 medal_id 列。具有相同 user_id 的人有多个奖牌,所以我的数据如下所示:

user_id | medal_id
101 1
123 2
101 2
144 1
144 2
....

我需要选择(使用 Zend)所有的奖牌,比方说,medal_id 为 2。使用 SELECT ... NOT IN 将消除第 2 行,我选择的 3 和 5。但我还需要删除其他两行,因为它们的 user_id 与我要从我的选择中删除的行相匹配。换句话说,我试图消除 user_id 与我的 NOT IN 数组中的任何内容匹配的行。 (评选中会有奖牌排列。)我是这样想的:

$db->select()->from('medals')
->where('medal_id NOT IN (?)', $medalIdsArray)
->where('user_id NOT IN (?)', _________);

但是我不知道在空白处填什么。我想知道我是否需要某种子选择。我只是不知道从哪里开始?有人可以帮忙吗?谢谢。

最佳答案

子选择

SELECT DISTINCT user_id FROM medals WHERE medal_id =2

列出拥有您要排除的勋章的所有用户。然后您可以选择所有剩余的行:

SELECT user_id, medal_id FROM medals WHERE user_id NOT IN (SELECT DISTINCT user_id FROM medals WHERE medal_id =2)

将其放入 Zend Object 符号中,这将转换为

$sub_select = $zdb->select()
->from("medals", array("distinct user_id"))
->where("medal_id = ?", '2');
$select = $zdb->select()
->from("medals", array("user_id", "medal_id"))
->where("user_id NOT IN ?", $sub_select);
print $select->__toString();

这将打印出上面显示的查询。

关于mysql - 如何使用 Zend SELECT NOT IN 并消除匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301200/

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