在PHP中使用mysqli创建子查询,以按升序获取数组的最后10个结果

在PHP中使用mysqli创建子查询,以按升序获取数组的最后10个结果,php,mysql,mysqli,Php,Mysql,Mysqli,我原以为这会很简单,但我很难弄明白为什么这不会填充数据数组 这个简单的查询很好: $queryPrice = "SELECT price FROM price_chart ORDER BY id ASC LIMIT 50"; $resultPrice = mysqli_query($conn, $queryPrice); $data = array(); while ($row = mysqli_fetch_array($resultPrice)) { $data[] = $row[0]; }

我原以为这会很简单,但我很难弄明白为什么这不会填充数据数组

这个简单的查询很好:

$queryPrice = "SELECT price FROM price_chart ORDER BY id ASC LIMIT 50";
$resultPrice = mysqli_query($conn, $queryPrice);
$data = array();
while ($row = mysqli_fetch_array($resultPrice)) {
$data[] = $row[0];
}
但我希望它以升序选择最后10个结果。我在其他SO问题上发现使用子查询,但我尝试的每个示例都没有输出,也没有错误

尝试了以下操作,但无效:

$queryPrice = "SELECT * FROM (SELECT price FROM price_chart ORDER BY id DESC LIMIT 10) ORDER BY id ASC";
$resultPrice = mysqli_query($conn, $queryPrice);
$data = array();
while ($row = mysqli_fetch_array($resultPrice)) {
$data[] = $row[0];
}  
我还尝试再次指定表名并使用IN,也不起作用:

$queryPrice = "SELECT price FROM price_chart IN (SELECT price FROM price_chart ORDER BY id DESC LIMIT 10) ORDER BY id";
$resultPrice = mysqli_query($conn, $queryPrice);
$data = array();
while ($row = mysqli_fetch_array($resultPrice)) {
$data[] = $row[0];
}  

在这两个示例中,我的数组都是空的,而不是返回最后10个结果,并且没有错误,因此我一定是做错了子查询,它返回了0行

您一定有错误,因为您的SQL查询实际上是不正确的

首先,如何判断您有错误:

$resultPrice = mysqli_query (whatever);
if ( !$resultprice ) echo mysqli_error($conn);
第二:MySQL中的子查询需要别名。所以你需要这个:

SELECT * FROM (
       SELECT id, price
         FROM price_chart
        ORDER BY id DESC LIMIT 10
       ) AS a
ORDER BY id ASC";

请将
)作为一个
?这是表别名。

您的第二个查询是最接近的。但是,您需要一个表别名。(如果您正在清除sql中的错误,您可能会看到这一点。注意,您需要在子查询中添加任何希望按其排序的字段。在本例中,它是
id

试试这个:

SELECT * FROM (SELECT price, id 
FROM price_chart ORDER BY id DESC LIMIT 10) as prices 
ORDER BY id ASC

子查询没有选择
id
列,因此不能在外部查询中按它排序。此外,MySQL要求在
FROM
JOIN
子句中使用子查询时指定别名

$queryPrice = "SELECT * 
                FROM (SELECT id, price 
                        FROM price_chart 
                        ORDER BY id DESC LIMIT 10
                ) x ORDER BY id ASC";
$resultPrice = mysqli_query($conn, $queryPrice) or die (mysqli_error($conn));
$data = array();
while ($row = mysqli_fetch_assoc($resultPrice)) {
    $data[] = $row['price'];
}  

如果在查询失败时调用
mysqli\u error()
,您可能会收到这些错误的通知。

注意,这将在order by上出错,因为子查询中没有
id
。非常感谢您,这样做非常有效!我不得不将while循环从num数组[0]更改为assoc数组['prices']正如巴尔马的回答所显示的那样,我选择了他作为正确的答案。