Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql&;PHP:如何在CSV列表中找到在前导位置有项目的行?_Php_Mysql_Csv - Fatal编程技术网

MySql&;PHP:如何在CSV列表中找到在前导位置有项目的行?

MySql&;PHP:如何在CSV列表中找到在前导位置有项目的行?,php,mysql,csv,Php,Mysql,Csv,这是一个奇怪的问题,所以我的标题也很奇怪 这是一个投票应用程序,所以我有一个名为选票的表格,它有两个重要字段:用户名和选票。现场投票是一个VARCHAR,但它基本上将25个ID(1-200之间的数字)的列表存储为CSV。例如,它可能是: 22,12,1,3,4,5,6,7,... 另外一个可能有 3,4,12,1,4,5,... 等等 因此,给定一个id(比如12),我想找出哪一行(或用户名)在前导位置有该id。因此,在我们上面的示例中,它将是第一个用户,因为他在第二个位置有12个,而第二个

这是一个奇怪的问题,所以我的标题也很奇怪

这是一个投票应用程序,所以我有一个名为选票的表格,它有两个重要字段:用户名和选票。现场投票是一个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个。有可能多人中有12人处于领先地位(比如说,如果用户3和用户4将其排在第1位),也有可能没有人排在第12位

我也需要做相反的事情(谁的问题最糟糕),但我想如果我能解决一个问题,剩下的就很容易了

我希望使用最少数量的查询和语句来实现这一点,但就我的一生而言,我不知道如何实现

我想到的最简单的解决方案是遍历表中的所有用户,并跟踪谁的id位于最前面的位置。现在这对我来说很好,但用户数量可能会呈指数级增长

我的另一个想法是进行如下查询:

select `username` from `ballots` where `ballot` like '12,%'
如果结果出来,我就完了,因为位置1是领先位置。但如果结果为0,我会:

select `username` from `ballots` where `ballot` like '*,12,%'
其中*是一个通配符,它将只匹配一个数字和一个数字(不同于%)。但我不知道这是否真的可以做到

不管怎样,有人对如何最好地做到这一点有什么建议吗


谢谢

我不确定我是否正确理解了您想要做的事情-获取在“选票”字段中按其在该字段中的位置排序的给定编号的用户列表

如果是这样,您应该能够使用MySQL函数:

SELECT username, FIND_IN_SET(12, ballot) as position 
  FROM ballots
 WHERE FIND_IN_SET(12, ballot) > 0
 ORDER BY position

这将返回选票中按位置排序的所有行(例如12),您可以应用
LIMIT
来减少返回的行数。

Wow这项工作做得很好。非常感谢。我应该学习MySQL函数。。