0

我有表前缀bok-inv-

id | number
1  | bok-1
2  | inv-3
3  | bok-2
4  | inv-2
5  | inv-10
6  | bok-3

它如何对number前缀为的字段进行排序inv-
在这种情况下,结果将是:

id | number
1  | bok-1
2  | inv-1
3  | bok-2
4  | inv-2
5  | inv-3
6  | bok-3
4

2 回答 2

1

你可以只使用 MySQL 的SUBSTRING()函数:

ORDER BY CAST(SUBSTRING(number, 5) AS SIGNED)

sqlfiddle上查看。

但是,如果可能的话,最好将前缀和整数部分存储在单独的列中:

ALTER TABLE mytable
  ADD COLUMN prefix ENUM('bok', 'inv'),
  ADD COLUMN suffix INT;

UPDATE mytable SET
  prefix = LEFT(number, 3),
  suffix = SUBSTRING(number, 5);

ALTER TABLE mytable
  DROP COLUMN number;
于 2012-06-29T23:40:51.450 回答
1

基本上你应该重新设计你的数据库结构。不幸的是,没有其他选项可以有效地处理这个问题,因为数据库不会在这些破折号上建立索引。因此,将两个字段分开是最常见的做法。否则,您将对每个 order by 子句运行表扫描。

编辑:除了讨论中的信息之外:https ://chat.stackoverflow.com/rooms/13241/discussion-between-eggyal-and-gusdecool很明显这是一个错误的设计和你的操作根本不应该执行请求。

如果不创建一个体面的结构,就不可能实现它,并且以这种方式创建一个合法的解决方案是不可能的。

于 2012-06-29T23:41:44.493 回答