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