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