首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >值为10的db + php计数器股票

值为10的db + php计数器股票
EN

Stack Overflow用户
提问于 2012-12-17 20:30:35
回答 1查看 123关注 0票数 0

祝大家好!

我有一个简单的计数器php+db,它检查最后添加的内容的引用编号,并通过将+1添加到特定内容类型(顺序)的前一个引用编号来给新添加的内容一个引用编号。它工作得很好,直到它的引用编号为10,然后它的股票和我添加的内容只给了10。所以我不能添加参考编号为11和12,13 ,14的内容...Drupal7感谢您的时间和帮助。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-17 21:02:11

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

不能使用字母数字列类型(varchar(255))并期望字母数字降序排序生成存储在该列中的最大数字。这是因为前导'9‘总是在其他值之前出现,即使像10、11、3529之类的值存储在列中也是如此。

您要么必须将列类型更改为数值类型,要么使用复杂得多的排序策略。如果不能更改该列的类型,则可能需要尝试在SELECT查询中使用类型转换,并按该类型转换的结果进行排序。虽然这种方法非常慢,效率也很低。

还要注意,你的算法是不安全的,如果你在没有事务的情况下工作,当你还在计算下一个索引时,另一个insert查询可能会干扰你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13914228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档