我有一个名为“connections”的表,其中包含以下字段:

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大于5,则只应选择cat_id,其中oid是user_id,id是connector_id。
结果(对于id=11和oid=9之间的连接)
    | cat_id     |
    |:-----------|
    | 4          |
    | 8          |

再举一个例子:
结果(对于id=33和oid=11之间的连接)
   | cat_id     |
   |:-----------|
   | 1          |
   | 6          |

请询问是否是不清楚的部分。

最佳答案

您应该能够通过逻辑上遵循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/和的方式。

关于mysql - 在MySQL中提前选择查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14689975/

10-12 21:32