- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取一半优秀玩家的 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/
我是一名优秀的程序员,十分优秀!