gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:06:37 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_id 并迭代它们,而不是执行相同的选择查询只是为了计算一半的记录

但是,我遇到了一个错误

'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/41149708/

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