[英]Why are my values being saved in ascending order in the database?
我剛剛注意到我的rand值是按升序(從低到高)保存的,但是我沒有告訴它要按升序保存。 但是,當我回顯蘭特時,它以正常方式顯示值。
源代碼:
<?php
try {
$db = new PDO('sqlite:randvalue.sqlite');
$db->exec("CREATE TABLE company (revenue_value INTEGER PRIMARY KEY, month VARCHAR)");
$i=1;
while($i <= 12) {
$randNum = rand(1,100);
$finalval = $randNum;
$stmt = $db->prepare('INSERT INTO company (revenue_value) VALUES (?)');
$stmt->execute(array("$finalval"));
echo "$finalval";
echo "<br>";
$i++;
};
print "<table border=1>";
print "<tr><td>value</td>";
$result = $db->query('SELECT * FROM company');
foreach($result as $row) {
print "<tr><td>".$row['revenue_value']."</td>";
}
print "</table>";
$db = NULL;
} catch(PDOException $e) {
print 'Exception : '.$e->getMessage();
}
?>
結果:
如何避免不按升序將值保存在表中,就像回聲中值不按升序保存一樣?
數據庫將嘗試以最有效的方式來存儲行,以便快速查找。 這意味着按表的主鍵定義的順序存儲它們(如果存在的話),在這種情況下, revenue_value
列是主鍵。 不能保證插入記錄的順序就是執行SELECT
時記錄返回的順序。
如果要按相同順序向后拉記錄,則需要單獨的一列來存儲插入記錄的順序。 通常,您將使用AUTO_INCREMENT
列,該列也是表的主鍵。 添加一個這樣的列,您將可以使用ORDER BY
子句按插入順序將它們拉回。 但是,正如我所說,數據庫通常會嘗試高效地存儲行,無論如何都要通過主鍵列對行進行排序,因此通常不需要 ORDER BY
,但是在任何查詢中都包含一個行仍然是一個好主意結果順序很重要的地方。
感謝@Rizier設法找到問題
只需刪除主鍵
$db->exec("CREATE TABLE company (revenue_value INTEGER PRIMARY KEY, month VARCHAR)");
至
$db->exec("CREATE TABLE company (revenue_value INTEGER, month VARCHAR)");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.