|
Тема
|
Разместване на стойностите из редовете
|
|
Автор | 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
Грешка на езика
Не уникално, а неповтарящо се![](http://i.dirbg.com/clubs/icons/wink.gif) Редактирано от 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 поле като идентификатор на позицията. ![](http://i.dirbg.com/clubs/icons/smile.gif)
| |
Тема
|
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 |
|
Да.
Вж. коментара по-горе за транзакциите![](http://i.dirbg.com/clubs/icons/tongue.gif)
| |
Тема
|
Re: Разместване на стойностите из редовете
[re: NDeu]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 13.05.03 09:47 |
|
Да...и за четирите точки. ![](http://i.dirbg.com/clubs/icons/smile.gif)
| |
|
|
|
|