【问题标题】:PHP & MySQL: How can I use "SET @rank=0;" in $query=PHP & MySQL:如何使用“SET @rank=0;”在$查询=
【发布时间】:2011-10-29 09:03:28
【问题描述】:

在我的 PHP 文件中,我使用这一行从我的 mySQL 数据库中提取数据:

$query = "SET @rank=0; SELECT @rank:=@rank +1 as rank, Blah Blah...";

如果我在 phpMyAdmin 的 SQL 窗口中检查 SELECT 语句(没有 $query= ),它工作正常。

但是,如果我在 PHP 中使用它,则会出现错误。它不喜欢“SET @rank=0;”少量。有没有办法使用“SET @rank=0;”当它在 "$query=" ?有解决办法吗?

其余代码是从数据库中提取数据的标准代码:

public function getmyData() {


 $mysql = mysql_connect(connection stuff);

 $query = "SELECT @rank:=@rank +1 as rank, formatted_school_name,  blah blah";

 $result = mysql_query($query);

            $ret = array();
                 while ($row = mysql_fetch_object($result)) {
                    $tmp = new VOmyData1();
                    $tmp->stuff1 = $row-> stuff1;
                    $tmp->stuff2 = $row->stuff2;

                    $ret[] = $tmp; 
                        }
                 mysql_free_result($result);

                 return $ret;

    }   

更新:我正在尝试使用 Amerb 关于使用多查询的建议。我像这样连接查询:

$query = "SET @rank = 0";

$query .= "SELECT @rank:=@rank +1 as rank...

我将结果改为:

$result = $mysqli_multi_query($query);

但是,由于某种原因,它失败了。我在一台运行 PHP 5.2 的机器上。有什么建议?

【问题讨论】:

  • 您使用什么代码来运行“查询”?这实际上是两个查询(注意SELECT 之前的分号),并且至少一些 PHP MySQL 绑定不期望在同一个调用中出现多个查询。
  • @Amber,您好 Amber,感谢您的留言。我添加了更多代码。这是从数据库中提取数据的常用代码。我明白你关于“;”的观点。有没有办法解决这个问题?谢谢。
  • 您好 Amber,感谢您提供链接。我正在尝试使用多查询,但由于某种原因它不起作用。我做错了什么。我发布了更多代码。如果你有什么建议,我很想听听。谢谢!
  • 当您说“由于某种原因失败”时,请详细说明 - 失败的原因、您看到的错误消息或行为等。

标签: php mysql select


【解决方案1】:

This guy here 似乎有办法将同一查询中的变量设置为零。不过,我没有在这台机器上设置 MySQL 来尝试它。

这是他在博文中建议的查询:

select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;

(是否有一些与计算等级有关的家庭作业要交?这是我这两天看到的第三个问题。)

您是否在检查重复分数?

【讨论】:

  • 嗨@Marvo,谢谢你的链接。这解决了我的问题。我正在排名分数......我希望我还是一个年轻的,学习好的学生 - 那些日子:)。感谢您的帮助。
  • 也许这是一个愚蠢的问题,但“p”代表什么?当我运行查询时,我收到错误“表‘my_table_name.p’不存在”。
  • 这是播放器表的别名。您可以在 p.* 之后看到“来自玩家 p”的子句。 p.* 现在表示“玩家表中的所有字段。这只是 SQL 中的一种速记方式。
【解决方案2】:

您必须同时启用多个查询,但我现在忘记了如何执行此操作。这是一项安全功能。

【讨论】:

    【解决方案3】:

    尝试将其作为 2 个独立的连续查询来执行。

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2017-12-11
      • 2018-09-06
      • 1970-01-01
      • 2019-05-27
      相关资源
      最近更新 更多