我刚刚注意到我的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();
}
?>
结果:
如何使它不以非升序的方式保存表中的值,就像在值不是按升序排列的echo中一样?
答案 0 :(得分:2)
数据库将尝试以最有效的方式存储行以进行快速查找。这意味着按照表的primary key定义的顺序存储它们(如果存在),在这种情况下,revenue_value
列是主键。无法保证插入记录的顺序是执行SELECT
时它们将返回的顺序。
如果你想在记录中拉回相同的顺序,你需要一个单独的列来存储它们的插入顺序。通常,您使用的AUTO_INCREMENT
列也是表的主键。添加这样的列,您将能够使用ORDER BY
子句按照插入顺序将它们拉回来。但是,正如我所说,数据库通常会尝试有效地存储行,无论如何它都是按主键列排序的,所以通常你不会需要 ORDER BY
,但它是在结果顺序很重要的任何查询中包含一个仍然是一个好主意。
答案 1 :(得分:0)
感谢@Rizier设法找到问题
只需删除主键
即可$db->exec("CREATE TABLE company (revenue_value INTEGER PRIMARY KEY, month VARCHAR)");
到
$db->exec("CREATE TABLE company (revenue_value INTEGER, month VARCHAR)");