【发布时间】:2009-08-27 03:26:15
【问题描述】:
这是一个奇怪的问题,所以我的标题也很奇怪。
这是一个投票应用程序,所以我有一个名为 ballots 的表格,其中有两个重要字段:用户名和投票。字段选票是一个 VARCHAR,但它基本上将 25 个 id(从 1 到 200 的数字)的列表存储为 CSV。例如它可能是:
22,12,1,3,4,5,6,7,...
另一个可能有
3,4,12,1,4,5,...
等等。
所以给定一个 id(比如说 12),我想找出哪一行(或用户名)在前导位置有该 id。因此,在我们上面的示例中,它将是第一个用户,因为他在第二个位置有 12 个,而第二个用户在第三个位置有它。有可能多个人可能有 12 个处于领先位置(例如,如果用户 #3 和 #4 在位置 #1 有它)并且可能没有人可能排名第 12。
我还需要做相反的事情(谁把它放在最糟糕的地方),但我想如果我能解决一个问题,剩下的就很容易了。
我想使用最少数量的查询和语句来做到这一点,但在我的一生中,我看不出怎么做。
我想到的最简单的解决方案是遍历表中的所有用户,并跟踪谁的 id 处于领先位置。这对我来说现在可以正常工作,但用户数量可能会成倍增加。
我的另一个想法是进行这样的查询:
select `username` from `ballots` where `ballot` like '12,%'
如果返回结果我就完成了,因为位置 1 是领先位置。但如果返回 0 结果我会这样做:
select `username` from `ballots` where `ballot` like '*,12,%'
其中 * 是一个通配符,将匹配一个数字且仅匹配一个数字(与 % 不同)。但我不知道这是否真的可以做到。
无论如何,有人对如何最好地做到这一点有任何建议吗?
谢谢
【问题讨论】: