|
|
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Вопрос такой: записей в таблице около 30000 Из них нужно выбрать, около 6000 записей. Идут они не по порядку. По первичному ключу не отсортируешь, признака, по которому их можно было отфильтровать и выбрать, тоже никакого нет. Просто 6000 тысяч, и именно их нужно выбрать, т.е скажем 1 запись, потом 35, потом 247 итд. Пока это делается посредством кривых рук так: select ID,NAME FROM MYTABLE WHERE ID=1 UNION select ID,NAME FROM MYTABLE WHERE ID=35 ... и так далее... Понятное дело , это не самый оптимальный вариант, кто может предложить что - либо более существенное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 04:21:07 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Можно так: Код: plaintext 1. 2. 3. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 05:43:41 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Можно так: Код: plaintext 1. 2. 3. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 05:44:41 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Dremuchij Forester Большое спасибо, сегодня попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 06:29:25 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Если борьба за скорость, то можно по-другому.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 09:21:24 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
2 Johnmen Ну уже договаривай как. Скорость - это всегда гут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 10:07:22 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
>Dremuchij Forester >Ну уже договаривай как. Я думал, что это несложно додумать...:) Реализация проста. Создается таблица ("временная"), в поле F которой прописываются те самые значения. Выполняется запрос с внутренним соединением осн.табл.с "временной" по полям T.ID и F. Получен интересующий нас НД. "Временную" таблицу окисляем (или зачищаем), смотря что выгоднее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 10:20:39 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Нет, господа, не все так просто... Вопрос вот в чем. Нужно так: select ID, NAME FROM MYTABLE WHERE ID=1 OR ID =5 OR ID=4 OR ID=7 OR ID=6 Цифры идут не по-порядку ,а при помощи конструкции OR, в результате получаю: 1 ww 4 qq 5 zz 6 xx 7 cc а нужно: 1 ww 5 zz 4 qq 7 cc 6 xx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 11:17:23 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Сервер не гарантирует тебе порядок вывода строк, если ты не указываешь в order by по какому критерию должна быть упорядочена выборка. Если такого критерия в структуре не предусмотрено, надо думать над структурой. Вообще посоветую изучить sql. Грабер тебе поможет. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 11:34:58 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
2 Johnmen Ага, будет быстрее, но как - то геморно это INSERT INTO A SELECT FROM B INNER JOIN A DELETE FROM A (ИМХО) 2 BobrovDm 1. В постановке вопроса требования к порядку не было. 2. Не уверен, но по-моему, вариант с UNION тоже не дает порядка по перечислению. А может я и Dremuchij. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2004, 11:51:45 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
2 Лентяй, спасибо за совет. Свою проблему я решил, несмотря на криворукость... Но вопрос все же остался. Попробую поставить вопрос по иному. Есть ли такой оператор, который позволяет выводить поля таблицы в том порядке, в котором они заданы в запросе? Без создания каких либо доп. таблиц, писания процедур ит.д... Конструкции ...OR...., ...where ID in...., union такого порядка не дают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 05:22:24 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Можно создать таблицу номеров ID выборки и номера прорядка выборки и сделать SELECT через эту таблицу с ORDER BY по эго порядковым номерам... Причем порядок и количество номеров можно спокойно менять в этой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 06:16:39 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Есть вариант такой: Код: plaintext 1. STRPOS можно взять из rFunc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 08:53:25 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. Поля-то как раз и выводяться в том порядке, в котором перечислены. А вот строки... Вообщем если нет поля по которому можно упорядочить выборку, то нужно его искусственно создать. Один вариант тебе уже предложили. Если хочеться без UDF обойтись то можно извратиться так примерно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Но я бы всетаки доп. табличку для сортировки завел или сортировал выборку на клиенте... Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 11:14:12 |
|
||
|
union'ы и как с ними бороться
|
|||
|---|---|---|---|
|
#18+
Лентяй Если хочеться без UDF обойтись то можно извратиться так примерно В Firebird 1.5 можно так не извращаться, а использовать CASE. Тогда union будут не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 12:00:36 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32553333&tid=1578463]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 523ms |

| 0 / 0 |
