Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
如果少于5,则添加一行,否则替换MySQL中的最低数字_Mysql_Sql - Fatal编程技术网

如果少于5,则添加一行,否则替换MySQL中的最低数字

如果少于5,则添加一行,否则替换MySQL中的最低数字,mysql,sql,Mysql,Sql,我被Mysql查询卡住了。 我有一个三列的表 user_id | person_id | score. 该表将用于存储每个人的前5个高分 我需要一个at查询来检查一个特定的人是否少于五行。 如果数量较少,请插入新行。但是如果有五行,我必须用新的一行替换最低的分数 它用于用PHP编写的Web服务,有关新分数的数据作为参数发布到方法中 现在已经被卡住了几个小时-甚至可以在一次查询中实现这一点吗?如果您有一个唯一的键来标识最低的分数,这可能是可能的。然后你可以用 插入关于重复密钥构造。但是,您必须

我被Mysql查询卡住了。 我有一个三列的表

 user_id | person_id | score.
该表将用于存储每个人的前5个高分

我需要一个at查询来检查一个特定的人是否少于五行。 如果数量较少,请插入新行。但是如果有五行,我必须用新的一行替换最低的分数

它用于用PHP编写的Web服务,有关新分数的数据作为参数发布到方法中


现在已经被卡住了几个小时-甚至可以在一次查询中实现这一点吗?

如果您有一个唯一的键来标识最低的分数,这可能是可能的。然后你可以用
插入关于重复密钥构造。但是,您必须安装一个触发器,该触发器可以显式跟踪最低分数。

如果您有一个唯一的键来标识最低分数,那么这是可能的。然后你可以用
插入关于重复密钥构造。但是您必须安装一个触发器,它可以明确跟踪最低分数。

我会提出这个方案,我没有尝试过,这只是一个想法:

据我所知,你只需要5个身份证。您可以像这样运行子查询

SELECT MAX(id) AS last_id FROM table

SELECT MIN(score), id AS lowest_id FROM table
然后


可能会有错误,也只有一个子查询是可能的,但我希望您能理解主要思想

我会提出这个方案我没有尝试过,这只是一个想法:

据我所知,你只需要5个身份证。您可以像这样运行子查询

SELECT MAX(id) AS last_id FROM table

SELECT MIN(score), id AS lowest_id FROM table
然后


可能会有错误,而且只有一个子查询是可能的,但我希望您了解主要思想

您可以在mysql中使用存储过程。我不知道这些表的名称,但如果你仔细看,你就会明白它是如何工作的

DELIMITER $$
DROP PROCEDURE IF EXISTS test $$
CREATE PROCEDURE test( IN testparam VARCHAR(22) )
BEGIN
 DECLARE count INT(11);
 SET count = (SELECT COUNT(*) FROM persons );
 IF count < 5 THEN
  insert into table_needed_for_insert values(testparam);
 ELSE
  update table_needed_for_insert where score=(select min(score) from table_needed_for_insert);
 END IF;

 select * from table_needed_for_insert
END $$
DELIMITER;
在这里,您可以查看有关mysql存储过程的教程:
您可以在mysql中使用存储过程。我不知道这些表的名称,但如果你仔细看,你就会明白它是如何工作的

DELIMITER $$
DROP PROCEDURE IF EXISTS test $$
CREATE PROCEDURE test( IN testparam VARCHAR(22) )
BEGIN
 DECLARE count INT(11);
 SET count = (SELECT COUNT(*) FROM persons );
 IF count < 5 THEN
  insert into table_needed_for_insert values(testparam);
 ELSE
  update table_needed_for_insert where score=(select min(score) from table_needed_for_insert);
 END IF;

 select * from table_needed_for_insert
END $$
DELIMITER;
在这里,您可以查看有关mysql存储过程的教程:
imo最简单的方法是插入数据

INSERT INTO top_scores (user_id, person_id, score_id) VALUES (1,2,3)
然后删除不合适的行

DELETE top_scores FROM top_scores
INNER JOIN 
(SELECT * FROM top_scores WHERE person_id = 2 ORDER BY score ASC LIMIT 5, 1000000) AS inappropriate_rows 
USING (user_id, person_id, score)

imo最简单的方法是插入数据

INSERT INTO top_scores (user_id, person_id, score_id) VALUES (1,2,3)
然后删除不合适的行

DELETE top_scores FROM top_scores
INNER JOIN 
(SELECT * FROM top_scores WHERE person_id = 2 ORDER BY score ASC LIMIT 5, 1000000) AS inappropriate_rows 
USING (user_id, person_id, score)

为什么不止一个查询是错误的?用户id和个人id是什么?我个人会将所有分数相加,当我需要时,使用0,5的限制。。。这样,你就可以让所有用户检查他们的所有尝试。永远不要说一个以上的查询是错误的。user\u id是玩家,person\u id是正在播放的角色。为什么不止一个查询是错误的?user\u id和person\u id是什么?我个人会添加所有分数,需要时,使用0,5的限制。。。这样,你就可以让所有用户检查他们的所有尝试。永远不要说一个以上的查询是错误的。user_id是玩家,person_id是正在扮演的角色。