Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:24 18.06.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема Разместване на стойностите из редовете  
Авторnmk (Нерегистриран)
Публикувано11.05.03 15:12



Здравейте,

Ето още един въпрос (така е, който не може да ходи, седи вкъщи и пише)...

Пак става дума за снимките, този път за подреждането им. В таблицата ще има колона ordNumber, която ще определя коя снимка идва първа (1), коя втора(2) и т.н.

Как трябва да се подходи при размяна на позициите на снимките? Искам например да сложа четвъртата снимка на второ място. Това ще остави първата на мястото и, втората, третата и т.н. (без четвъртата) ще бъдат изместени с една назад а четвъртата ще бъде update-ната до втора. Това добра идея ли е? Представа си нямам как ще стане без много updates на ordNumber стойностите, а те май не могат да се правят в една заявка...

Другият вариант е да разменя всички стойности на реда на втората и на четвъртата снимка, освен ordNumber. Това ми се вижда по-лесно и елегантно, но не знам как да го направя... как мога да "запазя" за момент стойностите на 2та реда и после да си направя съответние updates (май пак опрях до много неща, които да се правят в една заявка).

Някакви идеи?

Много благодаря предварително,
nmk



Тема Re: Разместване на стойностите из редоветенови [re: nmk]  
Автор NDeu (член)
Публикувано12.05.03 09:10



Приемаме че ordNumber ти е уникално

1 начин:Размяна на 2 с 4 и на 4 с 2
1.1 Вземаме id на единия ред
select id from MyTable where ordNumber=4
1.2. Заменяме 2 с 4
update MyTable set ordNumber=4 where ordNumber=2
1.3. Заменяме 4 с 2
update MyTable set ordNumber=2 where id=:id

2 начин: "Вмъкваме" 4 пред 2 и всички междинни ги избутваме с 1 назад
2.1. Вземаме id на единия ред
select id from MyTable where ordNumber=4
2.2 "Избутваме"
update MyTable set ordNumber=ordNumber+1 where ordNumber between 2 and 4
2.3 "Вмъкваме"
update MyTable set ordNumber=2 where id=:id

PS
Грешка на езика
Не уникално, а неповтарящо се

Редактирано от NDeu на 12.05.03 09:15.



Тема Re: Разместване на стойностите из редоветенови [re: NDeu]  
Автор Dakota (erotoman)
Публикувано12.05.03 10:19



Какво означава това?

update MyTable set ordNumber=2 where id=:id



Тема Re: Разместване на стойностите из редоветенови [re: nmk]  
Автор Dakota (erotoman)
Публикувано12.05.03 10:25



Въпреки, че при целочислени променливи, можеш да им разместиш стойностите без помощта на трета, в случая с БД, това не е уместно, защото можеш да имаш съвпадение на стойности.

Трябват ти три UPDATE заявки:

1.Поставя тази с номер 2 на номер 0.

2.Поставя тази с номер 4 на номер 2.

3.Поставя тази с номер 0 на номер 4.

Желателно е да си lock-неш таблицата, за да не се получават мазаници.

Освен това, в определени случаи, можеш да използваш самото auto_increment поле като идентификатор на позицията.



Тема Re: Разместване на стойностите из редоветенови [re: NDeu]  
Авторnmk (Нерегистриран)
Публикувано12.05.03 20:07



това са по три поредни заявки, нали?



Тема Re: Разместване на стойностите из редоветенови [re: NDeu]  
Авторnmk (Нерегистриран)
Публикувано12.05.03 20:41



Направих няколко проби с втория вариант и работи прекрасно. Само трябва сега да си напиша още един метод в класа и съм готов. :-)

Много благодаря!



Тема Re: Разместване на стойностите из редоветенови [re: Dakota]  
Автор NDeu (член)
Публикувано13.05.03 02:32



1. С :id съм означил параметъра id, чиято стойност е получена от първата заявка. С id съм означил primary key-я

2. Поставяне на 0, null, -1 или някаква друга стойност зависи от това, как е дефинирано полето. (Вж. PS-а в постинга). По принцип става.

3. "По закон божи" поредица от взаимно свързани промени в една РБД трябва да са в една транзакция (локването не е гаранция, че ще се изпълнят всички update/insert/delete операции, а в такъв случай трябва да отмениш (rollback) всички операции иначе базата ти остава омазана)

4. Според мен използването на Primary Key за нещо друго освен за идентифициране на записа е крайно нежелателно, още повече променянето му. (Предполагам, че си имал предвид primary key когато си писал auto_increment)



Тема Re: Разместване на стойностите из редоветенови [re: nmk]  
Автор NDeu (член)
Публикувано13.05.03 02:38



Да.
Вж. коментара по-горе за транзакциите



Тема Re: Разместване на стойностите из редоветенови [re: NDeu]  
Автор Dakota (erotoman)
Публикувано13.05.03 09:47



Да...и за четирите точки.




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.