1

这是我想要做的。我有一张桌子,上面有奖牌。有user_id柱子和medal_id柱子。相同的user_id人有多个奖牌,所以我的数据如下所示:

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

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

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

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

4

1 回答 1

0

一个子选择

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 对象表示法,这将转换为

$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();

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

于 2013-10-10T18:22:28.117 回答