0

i have table has 接頭辞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

基本的に、データベース構造を再設計する必要があります。残念ながら、データベースはこれらのダッシュにインデックスを付けないため、これを効率的に処理する他のオプションはありません。そのため、両方を 2 つのフィールドに分けるのが最も一般的な方法です。それ以外の場合は、すべての order by 句でテーブル スキャンを実行します。

編集:あなたが持っていた議論からの情報に加えて: https://chat.stackoverflow.com/rooms/13241/discussion-between-eggyal-and-gusdecoolこれが間違った設計であり、あなたがしている操作であることは明らかですを求めることはまったく実行されるべきではありません。

適切な構造を作らなければ実現することも、法的に問題ない解決策を作ることも不可能です。

于 2012-06-29T23:41:44.493 に答える
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 に答える