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_ids,只要它们在一个或另一个中,不管是哪个顺序,但如果 cat_id 大于5,它应该只选择cat_ids,其中oid是user_id,id是connector_id。

结果(对于 id = 11 和 oid = 9 之间的连接)

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

再举一个例子:
结果(用于 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 回答