MySQL中第一个数字来自WHERE子句中的整数

Meo*_*wts 1 mysql optimization search where

我正在四处寻找这个解决方案,但没有任何事情发生.

我有类别和子类别.它们由整数表示,如下所示:

1 -> high level
    10 -> sub
    11 -> sub
    12 -> sub
2 -> high level
    20 -> sub
    21 -> sub
Run Code Online (Sandbox Code Playgroud)

...等等.因此,要搜索高级别类别并让它返回其子类别,我需要搜索第一个数字.首先猜测是将其转换为字符串并搜索其子字符串.有没有更简洁的方法?

Ran*_*eed 18

如果类别ID具有任意数量的数字,您也可以使用一些数学运算:

SELECT CAST(id / POW(10, CAST(LOG10(id) AS SIGNED)) AS SIGNED)
Run Code Online (Sandbox Code Playgroud)

;)

开玩笑吧,去吧LEFT(id, 1).

或者MID(id, position, 1),检索其他数字.

  • @Meowts 请注意,这种方法不能很好地扩展。使用 `WHERE id LIKE '1%'` 进行搜索,[根据 Marcus Adams 的建议](http://stackoverflow.com/a/25141119/1446005) 将能够使用索引,而 `WHERE LEFT(id, 1)`不会。但不可能使用索引来检索(例如)第二个数字(例如“WHERE id LIKE '?1%'”)。还有[许多其他更智能的方法](http://stackoverflow.com/q/4048151/1446005) 来表示 RDBMS 中的分层数据。 (2认同)