我有一个包含订单日期的表格订单。
WarehouseId | OrderId | ItemId | OrderDate
-------------------------------------------
1 | 1 | 1 | 2016-08-01
1 | 2 | 2 | 2016-08-02
1 | 3 | 5 | 2016-08-10
2 | 1 | 1 | 2016-08-05
3 | 1 | 6 | 2016-08-06
(表格已简化,仅显示必填字段)
如何有效地选择特定仓库的最后一个订单?我现在这样做:
SELECT TOP 1 * FROM tblOrder WHERE WarehouseId = 1 ORDER BY OrderDate DESC
我担心的是,当我有特定仓库的百万(或更多)订单时,通过排序并选择第一条记录,它会太慢(我想?)。
有没有更有效的方法来选择最后的订单记录?
由于
答案 0 :(得分:1)
如果您打算这么做,可以考虑在// Get the Result Set
$result = mysql_query("SELECT p.id, p.manufacturer, p.reference, p.name, p.quantity FROM my_products p");
// Convert the rows and columns from the Result Set to a PHP Array
$data = array(); // empty array
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
// Now you have access any row or column
echo "<table>";
foreach($data as $row){
// prepare the data
$formatttedQuantity = number_format($row['quantity'], 2, '.', '');
// show each Table Row
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['manufacturer'] . "</td>";
echo "<td>" . $row['reference'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $formatttedQuantity . "</td>";
echo "</tr>";
}
echo "</table>";
字段上设置索引。这会加快速度(但要注意它可能会对这个表的其他查询产生影响 - 这是一个复杂的话题,与DBA交谈!)。
否则,您的查询没问题,除非您在有相同日期的情况下担心排序,在这种情况下您应该决定要订购的辅助字段,例如OrderID(您在评论中建议) )。