Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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表中查找第一行和最后一行,并以成对格式显示它们_Mysql - Fatal编程技术网

需要递归地从mysql表中查找第一行和最后一行,并以成对格式显示它们

需要递归地从mysql表中查找第一行和最后一行,并以成对格式显示它们,mysql,Mysql,例如,我有一个包含数据的表: 按重量说明排序,等级asc: ID : Weight : Rank desc 8 : 7 : 2 7 : 7 : 3 4 : 5 : 2 6 : 4 : 1 2 : 2 : 4 9 : 2 : 2 我需要从这个列表中递归地显示第一行和最后一行中的一对数据。 行可以是奇数或偶数,并且不是固定的。它可以是100秒 返回的结果应如下所示: ID : (8,9)**(7,2)**(4,6)

例如,我有一个包含数据的表:

按重量说明排序,等级asc:

ID : Weight : Rank desc 8 : 7 : 2 7 : 7 : 3 4 : 5 : 2 6 : 4 : 1 2 : 2 : 4 9 : 2 : 2 我需要从这个列表中递归地显示第一行和最后一行中的一对数据。 行可以是奇数或偶数,并且不是固定的。它可以是100秒

返回的结果应如下所示:

ID : (8,9)**(7,2)**(4,6)
我正在考虑Mysql Select UNION,但没有得到正确的支持。有什么帮助吗?

试试这个//想法是将排序表与反转排序表配对:

SET @fw=0; #forwards counter/index
SET @bw=(SELECT COUNT(id) FROM yourtable); #backwards index
SET @limit= @bw/2; #limit tohalf the set to avoid full set of versions (resulting in duplicates)


SELECT a.id, b.id
FROM (
SELECT @bw:=@bw-1 AS ct, id
FROM `yourtable` 
ORDER BY id
) a, (
SELECT @fw:=@fw+1 AS ct, id
FROM `yourtable` 
ORDER BY id
) b 
WHERE a.ct = b.ct
AND a.ct <= @limit

根据您提供的答案,这将是根据上表进行的查询:选择a.id,从中选择b.id,从中选择9:=9-1作为ct,从我的单表中选择id,按id a排序,选择0:=0+1作为ct,id FROM my_single_table ORDER BY id b,其中a.ct=b.ct和a.ct fw和bw以及limit是变量-它们适合任何大小的表,您不需要更改它们来修复您提供的编辑将不起作用。给定的是一个有效的MySQL查询。如果您需要首先列出行,那么它是一个派生表,您应该像。。。从其他表格中选择ID、权重、排名。。。X附加说明:如果您需要首先列出行,那么它是一个派生表,您应该像。。。从其他表格中选择ID、权重、排名。。。yourtable而不是yourtable我得到了它。首先,我需要从yourtable中按权重desc和rank asc列出数据,并将其保存在临时表中,从临时表中运行mysql查询,获取数据对,然后从临时表中删除旧行:“temp_table”。因此,在您的查询中,您的表将被此“临时表”替换。让我填写一些垃圾数据并测试它。无论如何,感谢您的时间和解决方案。对于6行ID,在上面的示例表格式中自动递增,我得到了结果:5,1**4,2**3,3未获得ID:6,即1,6**2,5**3,4,我至少有了一些开始。谢谢,但这只是一个问题。请帮助。