|
select
|
|||
---|---|---|---|
#18+
Можно ли средствами mysql (без програмных средств) сделать выборку по максимальному кол-ву совпадающих цифр за один запрос? Типа: area areaname 380 Ukraine 38044 Ukraine Kiev 380542 Ukraine Sumy ... Есть у меня номер 380442226577 Как сделать select по максимальному совпадению в первой колонке (area), чтобы определить назначение звонка? Сейчас у меня это реализовано програмными средствами, но много запросов получается, что грузит sql сервер. Хочется оптимизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 12:17 |
|
select
|
|||
---|---|---|---|
#18+
Если ты точно можешь сказать сколько символов сравнивать, то делай через LEFT JOIN или временную таблицу. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64.
mahoune ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 13:41 |
|
select
|
|||
---|---|---|---|
#18+
Супер! Работает! Только самого процесса я не понял. Поясни, плз, если затруднит. Бо доки что-то не помогают понять эту конструкцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 17:21 |
|
select
|
|||
---|---|---|---|
#18+
(left(@ph_no, N)=a.area)*N эта констркци означает: если N символ в номере телефона равен коду в поле то возвращает 1 иначе 0 left(@ph_no, N)=a.area Умножаем на N - получаем вес совпадения. То же для остального кол-ва символов слева от 1 до 8. Соответственно если все 8 цифр совпадут - самый тяжелый вес. Попали в точку! Склаlsdfnm для каждого кол-ва символов надо, т.к. не знаем сколько цифр совпадет. Грубо говоря может совпасть только определенное кол-во символов, это из-за использования = Если делать так: (a.area LIKE CONCAT(left(@ph_no, N),'%'))*N*10 То можно было-бы высчитывать приближенные вхождения! 10 здесь надо по столько постольку совпадение 2 символов должно "весить" больше 1 а совпадение 3 больше 2 и 1 и т.д. ORDER BY сортирует по этому весу. DESC в порядке убывания. LIMIT 1 - выдать только одну запись (в нашем случае самую "тяжелую"). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2003, 18:20 |
|
|
start [/forum/topic.php?fid=47&fpage=701&tid=1855759]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 150ms |
0 / 0 |