1

これが私がやろうとしていることです。メダルが入ったテーブルがあります。user_id柱と柱がありmedal_idます。同じ人user_idは複数のメダルを持っているので、私のデータは次のようになります。

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

たとえば、amedal_idが 2 のすべてのメダルを (Zend を使用して) 選択する必要がありますSELECT ... NOT IN。しかし、他の 2 つの行も削除する必要がありますuser_id。これは、選択対象から除外しようとしている行と一致する があるためです。つまり、配列user_id内のすべてに一致する a を持つ行を削除しようとしています。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 に答える