祝大家好!
我有一个简单的计数器php+db,它检查最后添加的内容的引用编号,并通过将+1添加到特定内容类型(顺序)的前一个引用编号来给新添加的内容一个引用编号。它工作得很好,直到它的引用编号为10,然后它的股票和我添加的内容只给了10。所以我不能添加参考编号为11和12,13 ,14的内容...Drupal7感谢您的时间和帮助。
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;
}发布于 2012-12-17 21:02:11
好的,经过长时间的讨论,答案是:
不能使用字母数字列类型(varchar(255))并期望字母数字降序排序生成存储在该列中的最大数字。这是因为前导'9‘总是在其他值之前出现,即使像10、11、3529之类的值存储在列中也是如此。
您要么必须将列类型更改为数值类型,要么使用复杂得多的排序策略。如果不能更改该列的类型,则可能需要尝试在SELECT查询中使用类型转换,并按该类型转换的结果进行排序。虽然这种方法非常慢,效率也很低。
还要注意,你的算法是不安全的,如果你在没有事务的情况下工作,当你还在计算下一个索引时,另一个insert查询可能会干扰你。
https://stackoverflow.com/questions/13914228
复制相似问题