|
|
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
Привет! Такой вопрос, создавая выражение индексу, можно лишь относительно всего выражения дать сортировку, написав вконце ASCENDING | DESCENDING А если я складываю в выражение 2 поля, например INDEX ON DTOS(DATE) + STR(Quantity,7) TAG xXx но при этом хочу чтобы даты шли с младшей до старшей, а количество с большего до меньшего, такое возможно? Т.е что-то типа INDEX ON DTOS(DATE)[DESCENDING] + STR(Quantity,7)[ASCENDING] TAG xXx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 14:18 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 14:45 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Код: plaintext Владимир, а вы уверены, что при отрицательных Quantity сортировка по этому полю будет верная? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 14:49 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
Aleksey-K - с вашего позволения Вот функция , взятая на сайте Алексея Климова Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. т.е. Код: plaintext Кстати в догонку : сортировка просто по STR(Quantity,7) - тоже нехорошо посмотри например что будет в случае если в одной дате будут значения 1 10 100 2 20 200 для того чтобы легче понять Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. дабы такого небыло у того-же Алексея подсмотрена функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. для проверки Код: plaintext т.е. прямой индекс Код: plaintext обратный Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 14:59 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
-=AlexiS=- Кстати в догонку : сортировка просто по STR(Quantity,7) - тоже нехорошо посмотри например что будет в случае если в одной дате будут значения 1 10 100 2 20 200 Не так, ведь ведущие пробелы никто не отсекает. Так что, все будет в порядке. Получится такой ряд ______1 ______2 _____10 _____20 ____100 ____200 Приведенный далее пример - некорректен. Во-первых, автор ничего не говорит ни об отрицательных значениях ни о дробных значения. Поскольку речь идет о количестве (Quantity), то, скорее всего, это все-таки положительные целые значения. Тем более, преобразование STR(...,7) на это и рассчитано. Во-вторых, Вы превышете допустимую размерность. N(5,2) предполагает, что под целую часть, включая знак , будет отведено только 2 разряда. 5 - всего, 2 - после запятой, 1 - разделитель, Целая часть = 5-2-1=2 разряда Поэтому как числа 100, так и числа -100 - это превышение допустимой размерости. То, что FoxPro позволил ввести такое значение - это особенность способа физического хранения полей типа Numeric. Но логически - это ошибка. В-третьих, ошибка связана не только со знаком, но и с некорректным указанием размерности в функции STR(). Ведь, по сути, хотя Вы и заявили размерность N(5,2), но фактически ввели значения типа N(7,2). Т.е. необходимо, как минимум, преобразование типа STR(...,7,2). Ну, и знак, конечно, влияет, про который в условии вообще ничего не говорится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 16:03 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
to ВладимирМ Вы конечно правы Но я писал свой пост до того как увидел ваши Алексея, что так получилось (мой сразу за его ) - просто совпадение. Функции привел для "общего" понимания проблемы - там ведь расписаны варианты для различных типов думаю что CTAC-KO это будет полезно. Пример ,каюсь, писал прямо в форме ответа , не проверив - 5 просто опечатка , хотел 8 . А почему я тоже вспомнил про "-" , толко позавчера делал формочку по остаткам - а они и + и -. Тоже сразу не вспомнил что могут быть меньше нуля. Слепил формочку для предпросмотра , для сортировки решил сделать индекс, а про "-" и забыл... Вот и решил человека предостеречь от своей ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 17:01 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Код: plaintext Все правильно, за исключением 10^8 надо 10^7. Поле Quantity имеет тип N(7) т.е. от -999999 до 9999999. соответственно (10^7 - Quantity) от 9000001 до 1. Все числа положительные, отсортируется нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 17:02 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
да и STR(..., 7) можно сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 17:02 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
Dima Tда и STR(..., 7) можно сделать про это я не подумав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 17:04 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
кстати - CTAC-KO а индекс для чего ? может лучше Select - у него в order by ASC / DESC можно указывать для каждой из колонок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 17:06 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за горячую дискуссию :) Не знал про существование у Select-а order by ASC / DESC для каждой колонки, но это все равно не поможет в моем случае. Вот в примере своем я привел поля дата и количество просто с неба, хотя и именно такое сочетание полей у меня тоже будет встречаться. А нужно мне это все для сортировки по клику хедера. Собственно в классе SmartGrid эти проблемы решены уже давно, но мне стало интересно каким образом бы я это сам мог замутить. Т.е. использовать готовое решение-то оно можно, но ведь и для собственного роста что-то нужно. Я не стану разбирать тот SmartGrid в поисках как там и что сделано, попробую сам, а там, глядишь, сравню что получилось. Попробую что даст функция с сайта Алексея Климова. Т.е., как я понял, стандартных методов решения данной проблемы нет? Т.е. вшитых в фоксю? ЗЫ Тут вот, к примеру, обсуждалась тема сортировки по клику в хедере, тока у вопрошавшей стоит вфп 5.0. Там поделилсь "велосипедом" в плане создания индекса тока по факту нажатия на хэдэр, а я вот еще при селекте сразу все индексы малюю и потом подумал - а нафига, можно ж наверное по запросу юзьверя. Вот и стал разбирать тот пример, немного его доработав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 18:00 |
|
||
|
Возможно ли создание индекса из 2х полей чтобы каждое в разные стороны сортировались
|
|||
|---|---|---|---|
|
#18+
вот он Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ну а затем думаю, мне зачастую приходится, например, индексировать по фамилии, а поскольку в моих данных важна еще дата, то я делал индекс типа name +DTOS(Date). Ну а как это реализовать в данном примере, если тут идея сама основана на 1 поле? Стал думать и теоретически дошел до идеи сортировки каждого поля в свою сторону, собственно в смартгриде так и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2006, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=221&tid=1590214]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 343ms |

| 0 / 0 |
