如何在SELECT
查询的子句中增加一个“固定”值,以便每一行都有不同的值集?对于说明意图的明显无效的示例:
SELECT
name, ++x as ordinal
FROM
foo;
name | ordinal
----------------
john | 0
paul | 1
george | 2
ringo | 3
最终目的是从数据库中选择用户来获得一、二、三等奖。我会让一个用户获得一等奖,五个二等奖获得者,二十个三等奖获得者:
SELECT
name, IF(++x<2, 'first', IF(x<7, 'second', 'third') ) as prize
FROM
foo LIMIT 26;
name | prize
------------------
alice | first
bob | second
charlie | second
dotan | second
erik | second
frank | second
george | third
henry | third
: | :
: | :
这是在 MySQL v5.5 上运行的。谢谢你。
您可以为此使用用户定义的变量。
在您的第一个示例中,这将像这样简单:
在这里,我们在另一个查询中初始化变量。这通常比这样做更舒服:
当您不允许在 PHP 中执行多个语句时。
变量是会话绑定的!
此外,我们在这里初始化它,
-1
以便第一行将具有 value0
,因为@rn + 1
首先评估。另请注意,我添加了一个
ORDER BY
子句。如果你不添加它,你的结果是没有意义的,因为除非你指定它,否则关系数据库中没有顺序。并且对子句中的任何变量进行的计算都SELECT
依赖于行的顺序。关于您的第二个示例,这很重要,要注意
SELECT
子句中的顺序。