Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Search_Join_Indexing_Int - Fatal编程技术网

MySQL搜索单个和多个子选择

MySQL搜索单个和多个子选择,mysql,search,join,indexing,int,Mysql,Search,Join,Indexing,Int,我有一个很大的表(大约10万行,目前所有的测试数据都是假的) 用户id和操作都不是唯一的,但用户只能执行一次操作。 (意味着只有一个id_用户和id_操作的组合 x和y都是1-100的整数 我为每一列都编了索引 CREATE TABLE IF NOT EXISTS `test` ( `id_user` int(11) NOT NULL, `id_action` int(11) NOT NULL, `x` int(11) NOT NULL, `y` int(11) NOT NULL, KEY `x

我有一个很大的表(大约10万行,目前所有的测试数据都是假的)

用户id和操作都不是唯一的,但用户只能执行一次操作。 (意味着只有一个id_用户和id_操作的组合

x和y都是1-100的整数

我为每一列都编了索引

CREATE TABLE IF NOT EXISTS `test` (
`id_user` int(11) NOT NULL,
`id_action` int(11) NOT NULL,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
KEY `x` (`x`),
KEY `y` (`y`),
KEY `id_user` (`id_user`),
KEY `id_action` (`id_action`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
这是一个我正在努力打造的游戏

我要做的是在表中搜索任何其他得分为x的用户,在y指定的范围内

例如,如果用户1执行操作1时,x的分数为75,y的范围为10。我想显示得分在65-85之间的所有其他用户(因为y的范围设置为10)

这就是我得到的,我刚刚在本地笔记本电脑上运行了它。它在300秒后超时…:(

我对10000000行的搜索(100个操作,100000个测试用户..所有随机数)失败了


我现在要研究将表加入到自身中,但我认为子选择会更有效。我在这里学习…任何建议都将不胜感激…:)

将其分为两个查询更容易,一个用于获取x的范围,另一个用于实际检索

如果您真的希望只在一个查询中执行此操作,可以尝试以下方法

Select t0.* from test t0, test t1 where t1.id_user=1 AND t0.id_user !=1 
AND abs(t1.x-t0.x) <= t1.y 
从测试t0中选择t0.*测试t1,其中t1.id\u user=1和t0.id\u user!=1

和abs(t1.x-t0.x)现在我想起来了,我也被te 100搞糊涂了!我现在正在运行你的想法…上帝的想法…ABD真的很有帮助。遗憾的是项目改变了,这个问题不再相关了…但这不是重点…所以是的,它很有帮助…抱歉让它挂起…现在更新!
Select t0.* from test t0, test t1 where t1.id_user=1 AND t0.id_user !=1 
AND abs(t1.x-t0.x) <= t1.y