1

これらのフィールドを持つ「接続」というテーブルがあります。

entry_id
user_id
connector_id
cat_id

いくつかの行を入れてみましょう

    | entry_id | user_id | connector_id |cat_id        |
    |:---------|---------|:------------:|:------------:|
    | 1        |       11|     33       | 1
    | 2        |       13|     11       | 2
    | 3        |        9|     11       | 4
    | 4        |       11|     33       | 6
    | 5        |       33|     11       | 11
    | 6        |        9|     11       | 8

疑似コード (id = 11 と oid = 9 の間の接続を使用)

Select cat_id FROM connections c
if cat_id is between 1 and 5 
   where c.connector_id = id OR c.user_id = id
   AND  c.connector_id = oid OR c.user_id = oid
else if cat_id is greater than 5
   where oid = user_id and id = connector_id

英語で;
cat_id が 1 ~ 5 の場合、oid と id の両方が connector_id または user_id にある cat_id を選択する必要があります。どちらか一方にある限り、順序は関係ありませんが、cat_id が 1 より大きい場合5 では、oid が user_id で id が connector_id である cat_ids のみを選択する必要があります。

結果 (id = 11 と oid = 9 の間の接続の場合)

    | cat_id     | 
    |:-----------|
    | 4          |        
    | 8          |  

もう 1 つの例:
結果 ( id = 33 と oid = 11 の間の接続の場合)

   | cat_id     | 
   |:-----------|
   | 1          |        
   | 6          |  

不明な点は質問してください。

4

1 に答える 1

2

if ステートメントを論理的にたどるだけで、これを達成できるはずです。何かのようなもの:

Select cat_id FROM connections c
where 
(id between 1 and 5 AND (c.connector_id = id OR c.user_id = id)
   AND  (c.connector_id = oid OR c.user_id = oid)) 
OR id > 5 AND (oid = user_id and id = connector_id)

注:いくつかのコメントに同意して、これがあなたがしなければならないことであることを確認してください。疑似コードからロジックをどのように意図したかについていくつかの仮定を立てましたが、これらは間違っている可能性があります。コピーして貼り付ける前に考えてください。これは、WHERE 句で OR / AND をどのように構造化したかに特に当てはまります。

于 2013-02-04T15:54:53.143 に答える