【发布时间】:2010-12-07 17:20:50
【问题描述】:
我有一个有点复杂的 MySQL 查询,我不知道如何在不消耗大量内存的情况下编写它。 (我真的不介意它是否会)
我有下表:
TABLE: users(id,ip)
------------------------------------
4BF1510 | 40.145.10.99 <-- SAME IP (A)
SAME ID --> 510SD55 | 65.12.105.42
SAME ID --> 510SD55 | 45.184.15.10
201505V | 40.145.10.99 <-- SAME IP (A)
984AZ6C | 72.98.45.76
| 10.15.78.10 <-- SAME IP (B)
| 10.15.78.10 <-- SAME IP (B)
SAME ID --> B1D56SX |
SAME ID --> B1D56SX |
我想要一个查询,每个唯一 id 或 ip 只获取 1 个项目,所以:
4BF1510 | 40.145.10.99
510SD55 | 65.12.105.42
984AZ6C | 72.98.45.76
| 10.15.78.10
B1D56SX |
最重要的事情:
- 如果多个条目具有相同的 IP 和相同的 ID -> 它们将被分组
- 如果多个条目具有相同的 IP 但不同的 ID -> 它们不会被分组
- 如果多个条目具有相同的 ID 但不同的 IP -> 它们将被分组
- 如果多个条目具有相同的 IP 但为空 ID 字段 -> 它们将被分组
- 如果多个条目具有相同的 ID 但为空 IP 字段 -> 它们将被分组
这意味着ID应该具有信任的第一优先级,因为多个用户可能使用同一个IP。
有什么有效的方法来实现吗?
非常感谢。
【问题讨论】:
-
这张桌子上有什么键?我很困惑,你怎么能有两个不同的条目,都没有 ID 和相同的 IP。
-
我怀疑您的架构需要更改。也许 ip 应该在由主键链接的不同表中。