[英]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.