0

祝大家有美好的一天

我有一个简单的计数器 php+db 它检查最后添加的内容的引用编号,并通过将 + 1 添加到特定内容类型(顺序)的先前引用编号来为新添加的内容提供引用编号。它工作正常,直到它达到参考编号 10,然后它存储并只为我添加的内容提供 10 个。所以我无法添加参考编号为 11 和 12、13、14 的内容... drupal 7 感谢您的时间和帮助。

if (empty($node->title)){
drupal_set_message('new node');

$query = db_select('node', 'n');
$query->condition('n.type', 'order', '=');
$query->fields('n', array('title'));
$query->orderby('title','DESC');
$query->range(0, 1);
$query->execute();
$result = $query->execute();

$record = $result->fetchAssoc();
drupal_set_message('previous order №: ' .print_r($record['title'], true));
$title = $record['title'] + 1;
drupal_set_message('order №: ' .print_r($title, true));
$form_state['node']->title = $title;
}
4

1 回答 1

0

好的,经过长时间的讨论,答案是:

您不能使用字母数字列类型 (varchar(255)) 并期望字母数字降序排序产生存储在该列中的最高数字。这是因为前导“9”总是会出现其他任何内容之前,即使像 10、11、3529 或存储在该列中的任何 iares 之类的值也是如此。

您要么必须将列类型更改为数字类型,要么使用更复杂的排序策略。如果您无法更改该列的类型,那么您可能想尝试在 SELECT 查询中使用类型转换并按该类型转换的结果进行排序。尽管这种方法非常缓慢且效率低下。

另请注意,您的算法不安全,如果您在没有事务的情况下工作,则在您仍在计算下一个索引时,另一个插入查询可能会干扰。

于 2012-12-17T13:02:10.973 回答