|
|
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Мне нужно получить каждый n-ый элемент из выборки элементов отсортированых по имени. к примеру в базе есть: name1 name2 name3 ..... name8000 Тока оно в базе не подряд лежи, а надо сортировать. Вот из этого набора мне нужна каждая десятая запись, типа чтобы было: name1 name10 name20 ..... При этом обрабатываю не все записи таблици, я делаю фильтрацию по другим полям. Вобщем из базы нужно выбрать по условию пару тысяч записей, отсортировать, и из этого набора забрать только каждую n-ую. Тупой вариант с n-ым количеством LIMIT запросов не предлагать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 15:46:55 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Лимит тут не причем. Отфильтровать having и срезать по n-ному запросу, например SET @Counter:=0; SELECT ID , IF(@Counter=11,1,@Counter:=@Counter+1) AS C HAVING C=10 /*это n*/; Не тестировал конкретно на 10-ю запись, но тестировал работу по переменным. Возможно такой вариант подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 20:57:50 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
MagicGTSМне нужно получить каждый n-ый элемент из выборки элементов отсортированых по имени. к примеру в базе есть: name1 name2 name3 ..... name8000 Тока оно в базе не подряд лежи, а надо сортировать. Вот из этого набора мне нужна каждая десятая запись, типа чтобы было: name1 name10 name20 ..... При этом обрабатываю не все записи таблици, я делаю фильтрацию по другим полям. Вобщем из базы нужно выбрать по условию пару тысяч записей, отсортировать, и из этого набора забрать только каждую n-ую. Тупой вариант с n-ым количеством LIMIT запросов не предлагать.НУ, если лимит не предлагать, то могу преждложить пронумеровать твоё результирующее (отсортированное и отфильтрованое) множетсво, поместить его в подзапрос и далее в обрамляющем запросе наложить условие на порядковый номер :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 06:08:19 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Вот тебе заготовка - если что, то сам доведи её до ума. З.Ы. В примере я использовал табличку TEST, в которой есть всего одно поле - NAME, и есть сто записей вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот запрос, который вернет тебе каждую 10-ю запись: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 06:25:27 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Валентин КОтфильтровать having и срезать по n-ному запросу, например SET @Counter:=0; SELECT ID , IF(@Counter=11,1,@Counter:=@Counter+1) AS C HAVING C=10 /*это n*/;хы... попробовал. Глючит не по-детски. Для наглядности простейший жоин. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 12:37:05 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Так это проблема сортировки значений, а не счетчика, в чем глюк, разве не видно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 15:17:24 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
глюк в том, что мускуль не гарантирует удачность такого трюка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 17:49:05 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
maXmoглюк в том, что мускуль не гарантирует удачность такого трюка. Ничего подобного, только кривые руки не гарантируют сделать выборку, которую нужно :) все остально разрешимо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 18:30:15 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
почему? Я ведь всего лишь having добавил. В исходном-то запросе всё нормально пронумеровалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 17:10:13 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
Действительно ошибка, проверял на 5.0.15. Видимо having на самом деле не может по внешнему уровню результирующего набора действовать, обгоняет на каждом витке нумерации в ID на 1, т.е. возвращает предыдущее... На 100% не поручусь, но что-то подобное на 4.0 я делал.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 18:30:20 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
в том-то и дело, что не обгоняет, четвёртую строчку-то правильно выдал. мускуль, кажется, официально заявил об отсутствии корректной подержки такого трюка. Поля, вычисляемые через переменные - это только для клиента. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 19:27:10 |
|
||
|
Выборка каждой n-ой строки
|
|||
|---|---|---|---|
|
#18+
И вообще, простые решения обычно самые эффективные :) Создать временную таблицу или массив - заполнить его в циклe запросом вида: Код: plaintext 1. Dmitry ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2005, 21:55:38 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33452329&tid=1853250]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
189ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 496ms |

| 0 / 0 |
