gpt4 book ai didi

mysql - 使用 AS 避免相同的查询 mySQL

转载 作者:行者123 更新时间:2023-11-29 15:16:10 25 4
gpt4 key购买 nike

我正在尝试获取一半优秀玩家的 ID,但仅限于包含在 node_id=28 中的 ID

" SELECT * FROM 
(SELECT npid.player_id
FROM node_to_player_ids npid

INNER JOIN players_gameplay_info pg
ON npid.player_id = pg.player_id

WHERE npid.node_id = 28
ORDER BY pg.score_collected ASC) AS selectedPlayers
LIMIT (SELECT COUNT(*) FROM selectedPlayers) / 2"

大约有 1000 000 个条目需要计算,所以我想将其存储在一个变量中,但是,我们不能像 @myLocalVariable

这样的变量中存储多行

只能存储一条记录。但是,应该可以将选择解释为 AS selectedPlayers

这样我希望能够重新使用获得的大量player_ids并迭代它们,而不是执行相同的选择查询只是为了计算一半的记录

但是,我收到错误

“SQLSTATE[42000]:语法错误或访问冲突:第 10 行“(SELECT COUNT(*) FROM selectedPlayers)/2”附近 1064

最佳答案

https://dev.mysql.com/doc/refman/5.7/en/select.html说:

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants, with these exceptions:

  • Within prepared statements, LIMIT parameters can be specified using ? placeholder markers.
  • Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables.

换句话说,LIMIT不允许其参数是列名、子查询或表达式。

您必须在两个查询中执行此操作。第一个得到你想要的计数:

SELECT FLOOR(COUNT(*)/2) AS player_count FROM selectedPlayers;

第二个用于您的原始查询,其中 LIMIT应用,使用文字数字参数或查询参数:

SELECT npid.player_id  
FROM node_to_player_ids AS npid
INNER JOIN players_gameplay_info AS pg
ON npid.player_id = pg.player_id
WHERE npid.node_id = 28
ORDER BY pg.score_collected ASC
LIMIT <player_count>

我写的地方<player_count>您可以通过插入整数值或使用 session 变量或查询参数将其替换为第一个查询的结果。或者,如果您在存储过程中编写此查询,则可以 DECLARE局部变量。

如果您使用 phpMyAdmin,请注意 session 变量在请求之间不会保留,因为每个请求都会启动一个新 session 。

关于mysql - 使用 AS 避免相同的查询 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com