【问题标题】:Why the query doesn't return the displayname as it does in phpmyadmin?为什么查询不会像在 phpmyadmin 中那样返回显示名称?
【发布时间】:2019-02-02 00:52:51
【问题描述】:

我有这段代码,如果我在 phpmyadmin 中执行它,它运行良好,但是当我在 php 中尝试它时它就不起作用。它返回“0 个结果”。

sql:

SET @felhasz := (SELECT user_id FROM `items_subtitles` GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);SELECT displayname FROM `users` WHERE id=@felhasz;

php:

$sql = "SET @felhasz := (SELECT user_id FROM `items_subtitles` GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);SELECT displayname FROM `users` WHERE id=@felhasz;";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "" . $row["displayname"];
    }
} else {
    echo "0 results";
}

【问题讨论】:

    标签: php mysql sql phpmyadmin


    【解决方案1】:

    您不能在一次调用 query() 时运行多个查询。相反,将您的查询分成两个调用,例如

    $sql = "SET @felhasz := (SELECT user_id FROM `items_subtitles` GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);";
    $conn->query($sql) or die($conn->error);
    $sql = "SELECT displayname FROM `users` WHERE id=@felhasz;";
    $result = $conn->query($sql);
    

    或者您可以通过将第二个查询中的变量替换为第一个查询中的值来将它们组合成一个:

    $sql = "SELECT displayname FROM `users` WHERE id=(SELECT user_id FROM `items_subtitles` GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);";
    $result = $conn->query($sql);
    

    请注意,您也可以使用multi_query(),但这会使从第二个查询中获取结果集变得复杂(有关如何处理,请参阅手册)。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 2020-07-15
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多