Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таблица с порядком вывода записей 
:(
    Опции темы
Deniz
Дата 8.5.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



DimW, при частых перестановках число знаков после запятой стремится к бесконечности.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Zloxa
Дата 8.5.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Deniz, Раз уж ты отвечаешь за топик стартера, может заодно скажешь, зачем часто переставлять? Мне вот, лично, доводилось сталкиваться лишь с тем, что порядок надо определить один раз...  ну может потом, еще пару раз откорректировать. 

И зачем вообще нужен кастом порядок?
Сдается мне, ТС желает почесать правое ухо левой рукой smile)


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 8.5.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(Zloxa @  8.5.2009,  14:00 Найти цитируемый пост)
Deniz, Раз уж ты отвечаешь за топик стартера...
ни коем образом.  smile 
Просто, лично мне, не нравится в поле order видеть дробные числа.
По поводу, для чего это нужно сам не знаю, подождем что скажет ТС.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 8.5.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Deniz @  8.5.2009,  10:46 Найти цитируемый пост)
DimW, при частых перестановках число знаков после запятой стремится к бесконечности.

отсюда следует только то, что рано или поздно оно преполнится и обнулится. 
вообще сама задача высасана из пальца, лично мне сложно представить жизненную ситуацию в которой это было бы необходимо.

Добавлено через 1 минуту и 24 секунды
Цитата(Deniz @  8.5.2009,  11:56 Найти цитируемый пост)
не нравится в поле order видеть дробные числа.

а их не нужно видеть пользователю, это служебное поле, в котором полезной инфы для юзера нет.
PM MAIL ICQ   Вверх
RomanEEP
Дата 8.5.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(DimW @  8.5.2009,  11:58 Найти цитируемый пост)
DimW, при частых перестановках число знаков после запятой стремится к бесконечности.отсюда следует только то, что рано или поздно оно преполнится и обнулится. вообще сама задача высасана из пальца, лично мне сложно представить жизненную ситуацию в которой это было бы необходимо.

Можете запустить калькулятор и убедиться, что можно выйти за пределы точности за пару десятков перестановок

Задача чисто практическая есть база вопросов, разбитых на разделы
и есть таблица, в которой записано сколько вопросов из какого раздела брать. Соответсвенно нужно дать возм-ть задавать очередность разделов во время теста
PM MAIL   Вверх
Deniz
Дата 8.5.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(DimW @  8.5.2009,  14:58 Найти цитируемый пост)
а их не нужно видеть пользователю, это служебное поле, в котором полезной инфы для юзера нет. 
так я вроде и не пользователь  smile 


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 8.5.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Задача чисто практическая

приктический пример:
Код

create table test_order
(id number
,name varchar2(100)
,ord number);

insert into test_order values (10,'Path1',1);
insert into test_order values (20,'Path2',2);
insert into test_order values (30,'Path3',3);
insert into test_order values (40,'Path4',4);
insert into test_order values (50,'Path5',5);
insert into test_order values (60,'Path5',6);
insert into test_order values (70,'Path5',7);

select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        10 Path1                                                                                     1
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        60 Path5                                                                                     6
        70 Path5                                                                                     7
 

update test_order
   set ord = (select t.ord
                from test_order t
               where t.id = 60)
 where id = 10;
 
update test_order
   set ord = ord + 1
 where id = 60 or ord > (select ord from test_order where id = 60);
 
SQL> select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        10 Path1                                                                                     6
        60 Path5                                                                                     7
        70 Path5                                                                                     8

PM MAIL ICQ   Вверх
RomanEEP
Дата 8.5.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(DimW @  8.5.2009,  12:31 Найти цитируемый пост)
приктический пример:

то что нужно!
И еще вопрос, если бы в таблице было бы 100.000 записей и надо было бы сдвинуть 50.000 запись, то пришлось бы отредактировать 50.000 записей. Может быть есть более оптимальный подход?
PM MAIL   Вверх
DimW
Дата 8.5.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(RomanEEP @  8.5.2009,  12:42 Найти цитируемый пост)
Может быть есть более оптимальный подход?

из за 100 000 я бы особо не переживал. но если десятки миллионов, то можно вычислять куда меньше двигать - вверх или вниз. отрицательные числа вас меньше беспокоят чем дробные?  smile 
других вариантов невижу.
PM MAIL ICQ   Вверх
DimW
Дата 8.5.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



вычислить можно примерно так:
Код

select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        80 Path1                                                                                     1
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        10 Path1                                                                                     6
        60 Path5                                                                                     7
        70 Path5                                                                                     8
        90 Path2                                                                                     9
       100 Path3                                                                                    10
       110 Path4                                                                                    11
       120 Path5                                                                                    12
       130 Path5                                                                                    13
       140 Path5                                                                                    14
 
select case when x > (select ord from test_order where id = 20) then 'up' else 'down' end zzz
  from (select avg(ord) x
          from test_order);
 
ZZZ
------------------------------
up


select case when x > (select ord from test_order where id = 120) then 'up' else 'down' end zzz
  from (select avg(ord) x
          from test_order);

ZZZ
------------------------------
down


Это сообщение отредактировал(а) DimW - 8.5.2009, 13:14
PM MAIL ICQ   Вверх
Zloxa
Дата 8.5.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Соответсвенно нужно дать возм-ть задавать очередность разделов во время теста 

Другими словами очередность определяется один лишь раз, при формировании списка вопросов теста ;) За все время жизни теста, практически не модифицируется. Вероятность что мы уйдем в оверфлоу ничтожно мала
Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Можете запустить калькулятор и убедиться, что можно выйти за пределы точности за пару десятков перестановок

Код

SQL> declare
  2    val number:= 1;
  3    cntr number:= 0;
  4  begin
  5    loop exit when val/2=val;
  6      cntr := cntr +1;
  7      val := val/2;
  8    end loop;
  9    dbms_output.put_line(cntr);
 10  end;
 11  /
 
432
 
PL/SQL procedure successfully completed


Если же вы хотите менять порядок следования вопросов при каждом тестировании, сохранять этот порядок в базе - глупость несусветная.
Цитата(Deniz @  8.5.2009,  12:17 Найти цитируемый пост)
так я вроде и не пользователь

Если ты смотришь на результат запроса, ты выступаешь в роли пользователя. А пользователю смотреть на это поле не нужно smile

Это сообщение отредактировал(а) Zloxa - 8.5.2009, 14:08


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Роман
Дата 9.5.2009, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Создаем

Код

CREATE TABLE table1 (
id INT NOT NULL AUTO_INCREMENT ,
name TEXT,
ord INT NOT NULL ,
PRIMARY KEY ( id ) 
)


Наполняем

Код

    id    name    ord
    1    text0    1
    2    text1    2
    3    text2    3
    4    text3    4
    5    text4    5
    6    text5    6
    7    text6    7
    8    text7    8


Меняем, например 3ю с 7й позицией:

Код

UPDATE table1
SET ord = IF(ord = 3, 7, 3)
WHERE ord IN (3, 7)


Получаем

Код

    id    name    ord
    1    text0    1
    2    text1    2
    3    text2    7
    4    text3    4
    5    text4    5
    6    text5    6
    7    text6    3
    8    text7    8


Это сообщение отредактировал(а) Роман - 9.5.2009, 05:12


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
RomanEEP
Дата 9.5.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(Роман @  9.5.2009,  04:48 Найти цитируемый пост)
Меняем, например 3ю с 7й позицией:

Я уже несколько раз показал в примерах, что поменять строки местами - не проблема. Проблема передвинуть одну строчку на другое место
PM MAIL   Вверх
Роман
Дата 9.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Удалим id
Код

ALTER TABLE `table1` DROP `id`



Цитата(RomanEEP @  9.5.2009,  07:21 Найти цитируемый пост)
Я уже несколько раз показал в примерах, что поменять строки местами - не проблема. Проблема передвинуть одну строчку на другое место 


Начальные данные 
Код

    name    ord
    text0    0
    text1    1
    text2    2
    text3    3
    text4    4
    text5    5
    text6    6
    text7    7


Перемещаем 3ю строчку в 7ю позицию
Код

UPDATE table1
SET ord = IF(ord = 3, 7, ord-1)
WHERE ord BETWEEN 3 AND 7


Получаем
Код

    name    ord
    text0    0
    text1    1
    text2    2
    text4    3
    text5    4
    text6    5
    text7    6
    text3    7


Так?


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.