此查询有什么问题:
SELECT * FROM leaderboard WHERE ALREADYWON != '1' ORDER BY Score LIMIT 0,'$limit'
之后的代码只是抛出错误:
Warning: Invalid argument supplied for foreach() in file ...
$limit
肯定有一个价值,我刚刚回应它。我正在使用Oracle。
有人能发现语法错误吗?
答案 0 :(得分:5)
Oracle不支持LIMIT关键字。 Oracle中的等效构造类似于
SELECT *
FROM (SELECT *
FROM leaderboard
WHERE AlreadyWon != '1'
ORDER BY score)
WHERE rownum <= <<limit>>
请注意, NOT 等同于查询
SELECT *
FROM leaderboard
WHERE AlreadyWon != '1'
AND rownum <= <<limit>>
ORDER BY score
第一个查询根据<<limit>>
顺序获取第一个SCORE
行。第二个查询获取任意一组<<limit>>
行和任意设置的订单,因为在ORDER BY子句之前应用了ROWNUM过滤器。
答案 1 :(得分:2)
ORACLE不支持LIMIT。我不得不使用这个查询
SELECT * FROM leaderboard
WHERE rownum <= '$limit'
AND ALREADYWON != '1'
ORDER BY Score
答案 2 :(得分:1)
ALREADYWON真的是一个字符串吗?比较不应该使用&lt;&gt;而不是!=?
答案 3 :(得分:0)
将PHP混合到SQL语句中是个问题。在此之后的一切......
SELECT * FROM leaderboard WHERE ALREADYWON != '1' ORDER BY Score
...可能是您错误的原因
此外,对于任何表格来说,它都被认为是“SELECT *”。您应该明确命名列。
在查看了一些回复之后,看起来您正试图获得TOP N记录。对于oracle来说,this是获得它们的一些方法(有点过时,但应该仍然有用)。
答案 4 :(得分:0)
我会说!=错了,应该是&lt;&gt;是一个有效的查询。我也不知道,但'$ limit'应该是'“。$ limit。”'。 GL!
答案 5 :(得分:0)
SELECT * FROM
(SELECT score, ROW_NUMBER() OVER (ORDER BY score) R FROM leaderboard WHERE alreadywon != 1)
WHERE R BETWEEN 0 and '$Limit';
这将获得您订购的分数,但最高可达您指定的限制。但要小心,因为这是SQL注入的候选者。您可能希望改为查看PHP参数化查询。