繁体   English   中英

在MySQL查询中使用MAX()会产生有问题的结果

[英]Using MAX() in mySQL query is giving problematic results

我正在尝试进行多个查询,以便通过用户名查找数据库中的最新条目。
这是我的代码:

<?php  
    require_once("../includes/db_connection.php");  

    $userID = $_POST["userID"];
    $returnString = array();

    // Query the max id value of a given key_id (find the most recent upload)
    $query = "SELECT MAX(id) FROM photos WHERE key_id = {$userID}";
    $result = mysqli_query($connection, $query);
    //additional while loop could go here

    //now get the url where from the max id value that we just queried
    $query = "SELECT url FROM photos WHERE id = {$urlID}";
    $result = mysqli_query($connection, $query);

    $returnString['url'] = $urlID;

    mysqli_free_result($result);        
    echo json_encode($returnString);


?>

我认为问题出在第一个查询中。 当我从中返回结果时,我得到:

{"maxID": "current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}

当我创建一个while循环来捕获数组时(为什么我需要这样做超出了我的范围,因为它只会返回1值):

while($row = mysqli_fetch_assoc($result)) {$returnString[] = $row;} 

然后我得到这个时髦的结果:

[{"MAX(id)":"30"}] 

30是正确的值,但是我不知道如何在下一个mySQL查询中使用该结果。

** * ** * **** 更新 * ** * ** * ** * ** *

查询:

SELECT url FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE key_id = {$userID});

从mySQL内进行查询时,效果很好,但是从我的php脚本中不起作用。 它返回这个奇怪的字符串:

{"url":{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}} 

这是更新的脚本:

require_once("../includes/db_connection.php");  

$userID = $_POST["userID"];
$returnString = array();

$query = "SELECT url FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE key_id = {$userID})";
$result = mysqli_query($connection, $query);

mysqli_free_result($result);    

$returnString['url'] = $result; 
echo json_encode($returnString);

除非我在架构中缺少从代码和注释中看不到的内容,否则可以通过组合SQL命令来节省往返时间。

$query = "SELECT id AS urlID, url FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE key_id = {$userID})";

然后像往常一样与结果交互。

更新的答案:

$query = "SELECT url FROM photos WHERE id = (SELECT MAX(id) FROM photos WHERE key_id = {$userID})";
$result = mysqli_query($connection, $query);
$row = mysqli_fetch_array($result):
$url = $row['url'];
echo json_encode($url);
mysqli_free_result($result);

我认为真正的问题在于循环和结果使用数组。

您应该更改为单个查询,例如:

SELECT url, MAX(id) as id FROM photos WHERE key_id = {$userID}

MAX(id) as id返回汇总列名作为id

如果只期望一行while则不需要循环while 只需将while更改为if以测试是否返回任何行,然后将值分配给单个变量:

$id = {$row['id']};
$url = {$row['url']};

“笨拙”的结果是由于尝试打印不需要的数组并存储了列名和值而导致的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM