|
|
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
Суть такова. Допустим есть таблица tab1 с полями ( id , reit ); id - primary key; reit - int not null. Заполнены они так: ------------- id | reit | ------------- 1 | 1 | 12 | 2 | 13 | 3 | 15 | 4 | ------------- Вопрос. Как за один запрос сделать вот так? : ------------- id | reit | ------------- 1 | 2 | 12 | 3 | 13 | 1 | 15 | 4 | ------------- Рейтинг я меняю по своему усмотрению. Следующий раз могу id 15 сделать 1. И тогда снова надо всё перестроить. Представляю как это можно сделать, если получить все строки массивом и обработать их, а дальше сформировать огромный Update, с правильно заполненными полями. Но я чувствую это извращение ещё то... У кого какие мысли есть? Как провернуть этот номер используя только MySQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 02:35:27 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
tanglir, Не совсем то... Инфа по ссылки пригодится если самому сформировать значения, для каждой строчки. А я пытаюсь сделать так, что бы обновив id 15 и сделав у него reit = 1. Послать запрос, который пересчитает и обновит все значения рейтинга. Там где было 1 сделает 2, где было 2 сделает 3. Не знаю, возможно ли так сделать вообще.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 15:26:47 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
oboldeitanglir, Не совсем то... Инфа по ссылки пригодится если самому сформировать значения, для каждой строчки. А я пытаюсь сделать так, что бы обновив id 15 и сделав у него reit = 1. Послать запрос, который пересчитает и обновит все значения рейтинга. Там где было 1 сделает 2, где было 2 сделает 3 . Не знаю, возможно ли так сделать вообще.... таа, г.-вопрос Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 16:05:22 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
qwerty112, На первый взгляд это может сработать, но это не так. Получается ерунда((( reit будет повторяется. А если несколько раз выполнить подобный запрос. То число в reit будет больше чем строк в таблице, а это не подходит. Допустим есть всё та же таблица: ------------- id | reit | ------------- 1 | 1 | 12 | 2 | 13 | 3 | 15 | 4 | ------------ Выполним запрос и получим (для наглядности отсортирую по полю reit): ------------- id | reit | ------------- 15 | 1 | 1 | 2 | 12 | 3 | 13 | 4 | ------------ Казалось бы идеально. Но... Если id=15 reit = 2 ------------- id | reit | ------------- 1 | 2 | 15 | 2 | 12 | 3 | 13 | 4 | ------------ То же самое если попытаться увеличить рейтниг, сделать reit=3 для id= 12. ------------- id | reit | ------------- 1 | 2 | 12 | 3 | 13 | 4 | 15 | 5 | ------------ З.Ы. Наверно тему нужно было назвать "Update нескольких строк с условием" сглупил((. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 17:12:47 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
oboldei, Скорее всего. Попробуйте сначала математически строго сформулировать задачу и вопрос. Возможно он к тому времени и решится. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 18:23:13 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
oboldeiКазалось бы идеально. Но... Если id=15 reit = 2 ------------- id | reit | ------------- 1 | 2 | 15 | 2 | 12 | 3 | 13 | 4 | ------------ нее, ТС, так "кина не будет" если это авторобновив id 15 и сделав у него reit = 1. Послать запрос, который пересчитает и обновит все значения рейтинга. Там где было 1 сделает 2, где было 2 сделает 3. на этих данных Код: sql 1. 2. 3. 4. 5. 6. 7. я "переосмыслить творчески" могу, - (ТЗ:циклически сдвинуть рейтинг у всех id) то, что такое "Если id=15 reit = 2" - не понимат ! что, например, должно произойти с reit того id, у которого reit =2 (id=1), на момент ДО выполнения запроса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 18:23:15 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
qwerty112, Вы не так поняли. Если выполнить запрос: Код: plsql 1. На таблице, заполненной следующим образом. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. То получим: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. авторя "переосмыслить творчески" могу, - (ТЗ:циклически сдвинуть рейтинг у всех id) Не совсем так. Если формировать ТЗ, то оно будет звучать примерно так: 1. Поле reit должно быть уникальным. 2. Значение в поле reit всегда от 0 до count(id)-1. Хотя в примерах выше я нумеровал с 1. Реально же она будет с 0. 3. Изменение reit будут также в диапазоне от 0 до count(id)-1. То есть reit с id=15 может быть присвоено любое значение не превышающие count(id)-1; 4. Циклически сдвинуть рейтинг при изменении значения. С учётом пунктов 1-3. Получается некий ТОП. Первая позиция которого reit=0. Вторая позиция которого reit=1. И когда изменяется reit, меняется позиция в топе. З.Ы. Вывел закономерность. Реально нужно менять все строки где new_reit>=reit. Строк где (new_reit<reit). изменения не коснутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 21:56:28 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
oboldei, авторчто, например, должно произойти с reit того id, у которого reit =2 (id=1), на момент ДО выполнения запроса ? В том то и дело что нечего. Получается что на данный момент id=1 имеет reit=1. То означает первую позицию в ТОП. А присваивая id=15 reit=2 я меняю значения начиная со второй позиции ТОП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 22:02:04 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
Реализовал, задачу с помощью PHP. Хотелось бы привести ещё к виду: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но сейчас задача реализована так: Код: php 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Уважаемые гуру MySQL. У кого есть идеи, как эти условия выполнить в запросе на обновление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 01:06:18 |
|
||
|
Update и сортировка
|
|||
|---|---|---|---|
|
#18+
oboldeiнужно менять все строки где new_reit>=reit. Строк где (new_reit<reit). изменения не коснутся.А протестирую-ка я новую прошивку своего ХШ Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 15:35:15 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38458319&tid=1835759]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 333ms |

| 0 / 0 |
