在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']正如巴尔马的回答所显示的那样,我选择了他作为正确的答案。