実際のダイヤルコードよりも大きい最も近いダイヤルコードを検索する必要があります。たとえば、33から最も近いものは331または332になります(331が存在しない場合)...したがって、33xxxxである必要があり、34は無効です。
これらの2つのクエリは機能しますが、遅すぎます(250ms /行)。
SELECT Dialcode
FROM table
WHERE (Dialcode LIKE '$var%' AND Dialcode > '$var' AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1
SELECT Dialcode
FROM table
WHERE (MATCH(Dialcode) AGAINST ('$var*' IN BOOLEAN MODE) AND Dialcode > '$var'
AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1
私のダイヤルコードはPRIMARYKEYBIGINT(15)です。
私はこれを行っていますか、それは本当に速いです(> 1ms /行)が、それは私が必要としているものではありません:
SELECT Dialcode
FROM table
WHERE (Dialcode >= '$var' AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1
だから私の問題はLIKE/MATCHAGAINSTだと思います。
任意のアイデアをいただければ幸いです。
更新ソリューション:
raina77owの提案から適応したソリューション:
SELECT Dialcode FROM table WHERE (( (Dialcode BETWEEN $var * 1 AND ’9’ )
OR (Dialcode BETWEEN $var * 10 AND $var.’99’ )
OR (Dialcode BETWEEN $var * 100 AND $var.’999’ )
OR (Dialcode BETWEEN $var * 1000 AND $var.’9999’ )
…
) AND Price IS NOT NULL) ORDER BY Dialcode ASC LIMIT 1
みんなありがとう!