如何将索引数组的值以与数组相同的顺序插入MySQL表


How to INSERT values of indexed array to a MySQL table in the same order as the array

让我先说一下,我是MySQL的新手!

我正在尝试构建一个Drupal模块,为我的产品属性创建一个自定义选项列表。我有一个按降序索引的日期数组,对于数组中的每个日期值,下面的查询应该创建一个属性选项,该选项存储在uc_attribute_options表的"name"字段(varchar)中。但是,当我查看列表输出或我的"name"字段(在"Sort by key: None"中查看它)时,输出列表中的日期值以字母顺序出现,而不是与我的数组中相同的降序。我已经尝试了我能想到的每一种组合,但我似乎无法"整理"出这个。

$aid = 1;
$i = 0;
$date_array = array ( 
"Thursday, August 25, 2011", 
"Thursday, September 1, 2011", 
"Thursday, September 8, 2011", 
"Thursday, September 15, 2011",
"Thursday, September 22, 2011");
foreach ($date_array as $item) {
db_query("INSERT INTO {uc_attribute_options} (aid, name, cost, price,
weight, ordering) VALUES (%d, '%s', %f, %f, %f, %d)", $aid, $item, 0, 0, 0, 0);
...
}
输出:

Thursday, August 25, 2011
Thursday, September 1, 2011
Thursday, September 15, 2011
Thursday, September 22, 2011
Thursday, September 8, 2011

我想要什么:

Thursday, August 25, 2011
Thursday, September 1, 2011
Thursday, September 8, 2011
Thursday, September 15, 2011
Thursday, September 22, 2011

如何使输出以与数组中相同的降序显示?

提前感谢您的指点

<insert comment about row order here>

好,我写这个是因为这是一个合法的问题,即使应用程序是关闭的(在关系数据库中不应该有问题(即使有auto_increment),等等等等):

$date_array = array ( 
"Thursday, August 25, 2011", 
"Thursday, September 1, 2011", 
"Thursday, September 8, 2011", 
"Thursday, September 15, 2011",
"Thursday, September 22, 2011");
$out = array();
// create an associative array which maps numeric timestamps to the dates.
foreach( $date_array as $date )
    $out[ strtotime( $date ) ] = $date;
// sort the keys (the timestamps)
ksort( $out );
// this will output in timestamp order.
foreach( $out as $item )
{
    db_query("INSERT INTO {uc_attribute_options} (aid, name, cost, price, weight,
       ordering) VALUES (%d, '%s', %f, %f, %f, %d)", $aid, $item, 0, 0, 0, 0);
}

数据库中的行没有固有的顺序。如果您在选择它们时没有指定顺序,则数据库可以自由地以所需的任何顺序返回它们。这不一定是插入顺序。如果您希望以特定的顺序输出,则必须按照该顺序请求输出,而不能更改插入数据的方式。

如果需要帮助,共享的代码是选择数据并显示数据的部分,而不是插入行的部分。

进入数据库的事物的顺序通常是无关的,如果这是作为日期存储的,那么您可以在检索时使用order BY查询以特定顺序获取事物。例如:

SELECT date FROM my_table ORDER BY date ASC; -- or in some cases ASCENDING

您还应该存储Date类型而不是字符串,这样比较变得更容易,字符串将按字母顺序排序,这不会给您想要的结果。

在关系数据库中没有"固有的"行顺序。

您必须根据行内容进行排序(无论是在SQL中还是在您的程序中),或者,如果这是不可能的,您必须通过添加另一列来存储您想要的排序顺序。

在您的例子中,看起来您可以在日期列上排序(但是您需要将日期存储为日期,而不是字符串,因为那样只会以无意义的字母顺序排序)。

如果原始数组不总是保证按照定义的顺序,您可能需要添加数组索引作为额外的列(也许这就是ordering的作用)。