Смещение рядов

Статус
В этой теме нельзя размещать новые ответы.

mig

Guest
Смещение рядов

Как можно поменять местами ряды?
например в таблице написано:

id - name - url
2 - n - u
8 - n - u
19 - n - u
4 - n - u

как поменять ряд с id - 19 на ряд с id - 8?
 

mig

Guest
Profic
Мне надо поменять местами весь ряд. В факу я там не чего не нашел про это, там только описание базы. То что нет первой и последней строки в базе, это же не так важно для данного случия?
 

SelenIT

IT-лунатик :)
Самый "лобовой" вариант- в 3 апдейта (по полной аналогии с простым обменом значениями между 2-мя переменными).

Но вообще любая задача, требующая изменения id-а, скорее всего просто криво поставлена. Наверняка есть другой путь для достижения конечной цели.
 

Profic

just Profic (PHP5 BetaTeam)
mig
Там написано, что порядок записей существует только при выборке, и достигается сортировкой по какому-либо признаку.
Вот и меняй/заводи признак.
 

mig

Guest
SelenI
путь один, надо поменять 2 ряда местами :)

Profic
Так в этом вся проблема, мне не надо сортировать, я вывожу без сортировке, а попорядку, как записано в таблице.
 

antson

Новичок
Партнер клуба
mig
id у тебя описан как первичный автоинкрементируемый ключ ?

CREATE TABLE `links` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(200),
`url` varchar(200),
KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

mig
select * from links order by id гарантирует вывод в порядке
создания записей в таблице, в остальных случаях на усмотрение оптимизатора запросов SQL

-~{}~ 02.08.05 13:03:

вместо многократных перестановок записей в таблице и риска их потерять . введи в таблицу поле
outorder int(10)

и задавай порядок вывода через него
начально можно проинициализировать
update links set outorder=id where 1=1

твой запрос для вывода примет вид
select * from links order by outorder

-~{}~ 02.08.05 13:09:

mig
Попутно в таблице нет никакого порядка записей. только ключ
(одно или несколько полей позволяющих однозначно идентифицировать запись). Если предметная область не позволяет выделить ключ, он вводиться насильно.
 

mig

Guest
antson
Честно говоря я так и не понел как поменять ряды местами :(

Так же я не понел смысл в outorder, это поле после инициализации стало иметь такие же цифры что и айди, смысл в 2-ух одинаковых полях? С 2-мя полями нету риска потери?
Ещё не понел зачем AUTO_INCREMENT=1, у меня и без него всегда было +1.
 

antson

Новичок
Партнер клуба
mig
AUTO_INCREMENT=1 при создании таблицы можно задать начальное значение счетной переменной. так просто правильнее.

поле outorder я показал как быстро проинициализировать одним запросом. еще удобнее для пересортировок если нумеровать целыми десятками id*10
id outorder
1 10
2 20
3 30
4 40

теперь чтобы строка с id = 4 по запросу
select * from table order by outorder
выводилась третьей
достаточно одного присваивания
update table set outorder=25 where id=4

при правке введенного поля мы нетрогаем исходные данные
в худшем случае нам придется только заново проставлять поле outorder.

если менять строки местами, то возможна ситуация
меняем 1-2 2-3 3-4 местами в одной из операций
произошел сбой . и две записи теперь имеют одни и теже значения.
Если хочешь все таки менять кортежи значениями, то
следует почитать о транзакциях. Почитай на будущее,
а пока KISS (делай проще)
 

Фанат

oncle terrible
Команда форума
я вывожу без сортировке, а попорядку, как записано в таблице.
ПОРЯДКА
В ТАБЛИЦЕ

НЕТ!!!

-~{}~ 02.08.05 15:18:

чем быстрее это дойдёт до автора топика, тем больше времени это сэкономит доброхотам, которые пытаются дать решение человеку, который не понимает - зачем оно
 

mig

Guest
antson
Спасибо, но я все равно не понел как их поменять местами, у меня при update table set outorder=25 where id=4, вечно ошибка появляется:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ....

В файлах все на много проще было....

Фанат
Спокойно объяснить нельзя? Нету его там, а дальше то что?
Я не совсем понимаю зачем оно, себя то вспомни, все так же не понимали куда, зачем и почему.
 

Фанат

oncle terrible
Команда форума
нет, нельзя.
когда тебе объясняют спокойно - до тебя не доходит.
сказали ему - нет ни первых, ни последних, а он радостно отвечает, что у него вторая и восьмая.
Ну, ничего страшного - есть такой тип людей. Ну, не понимают, когда им спокойно объясняешь.
А вот так прикрикнешь - и тут же мозги вправились.
Ты должен спасибо сказать, а не ныть.

Да, с файлами проще для понимания.
там вся просто - без абстракции. Если тебе недоступно абстрактное мышление - делай на файлах. Никто тебя в базу силком не тащит.

Я не совсем понимаю зачем оно,
Всё ещё не понимаешь?
Что в базе никакого порядка нет, и если тебе нужен порядок, то ты должен сам его задать? И для этого порядка нужно поле order?

А зачем тебе, кстати, менять местами? Что за причина, по которой тебе срочно понадобилась менять "ряды" местами?
может быть, это тоже от непонимания?
 

mig

Guest
Фанат
То что там ни первых, ни последних я понел ещё с факу. Нету типа людей которые не понимают, просто надо объеснять так, что бы понел любой, а не так что бы понел такой же, знающий. Я и не ною, я хочу узнать как их переставить. Если бы php работал нормально с файлами, я бы делал на них.
Про порядок и ордер то я понел, я уже и другое понел, что проще самаму разобраться, чем на форуме дождаться реальной помощи, а не ссылки на теорию.

Есть разделы, есть ссылки, вот мне что бы ссылки можно было менять местами или переносить их в другие разделы.
 

Фанат

oncle terrible
Команда форума
просто надо объеснять так
прости, родной.
НАДО - это тебе.
а мне, к примеру, или другим посетителям форма, ничего не надо. здесь не институт и не школа. а мы - не учителя, которым платят зарплату, чтобы они учили всяких балбесов.
поэтому если тебе надо решить свою задачу - то это именно тебе придётся напрягаться, чтобы понять что-то.
А не ждать, пока тебе всё разжуют и в рот положат.
Если бы php работал нормально с файлами, я бы делал на них.
ути-пути! Оказывается, пхп плохо с файлми работает.
ага, по тем же причинам, что и с базой.
ну расскажи нам - какие проблемы у пхп с файлами. очень интересно.

вот мне что бы ссылки можно было менять местами
зачем?
или переносить их в другие разделы
а это-то здесь при чём?
 

mig

Guest
1. Согласен, надо мне. Я не прощу разжувать, мне надо только узнать как переставить местами и все, если есть где нибуть пример, то мне бы хватило ссылки на этот пример :)

2. Если файл весит 10 мегов, мне надо изменить 1 строчку в конце файла, это придеться весь файл читать до этой строки, пока скрипт добереться до нужной строки, посетитель уже уйдет с сайта :) Так же если надо показать нужную строку, то так же надо читать весь файл. База хоть и делает тоже самое, но работает во много раз быстрей.

3. Ну как зачем, что бы они были в нужном мне порядке.
4. Это при том, что ссылки и разделы в 1 таблице, зачем создавать 2 таблице, когда можно в 1 сделать.
 

Фанат

oncle terrible
Команда форума
Если файл весит 10 мегов, мне надо изменить 1 строчку в конце файла, это придеться весь файл читать до этой строки
как интересно!
а каким же способом решают эту задачу другие языки программирования?
Так же если надо показать нужную строку, то так же надо читать весь файл. База хоть и делает тоже самое, но работает во много раз быстрей.
неправда.
база не читает весь файл.
база читает индекс, и по нему сразу обращается к нужной строчке.

Ну как зачем, что бы они были в нужном мне порядке.
А чем тебя не устраивает текущий порядок?
почему бы их не выводить по алфавиту, к примеру?
А если это ссылка, которую надо поднять кверху, то зачем её менять местами с какой-то другой, почему бы просто не поднять?

ссылки и разделы в 1 таблице, зачем создавать 2 таблице, когда можно в 1 сделать.
затем, что разделы надо хранить в содной таблице, а ссылки - в другой
 

mig

Guest
1. Новерно так же как и база решила эту задачу, работает по тому же принципу, но скорость быстрая.

2. Ну вот, если бы php с файлами работал как база, то я бы делал на файлах.

3. Если я сделаю ссылки по алфавиту, то это не решит проблемы, я ещё хочу как в php-nuke с модулями, там нужно тоже самое.
Ну мне и надо поднять/опустить. В любом же случии при поднятии одного, надо опускать другое, может это база опускает сама, я же не знаю.

4. Смотри, есть 2 поля, name и url, если поле url пустое, то это раздел, если не пустое, то ссылка. По моему тут все просто и 2 база тут не к чему, ну тебе видней, но я так думаю :)
 

Фанат

oncle terrible
Команда форума
сделай поле "поднять" и пиши туда единицу
сортируй order by поднять,name

-~{}~ 02.08.05 18:21:

Новерно так же как и база решила эту задачу, работает по тому же принципу, но скорость быстрая.
Я, кажется, объяснил - как работает база.
для тугодумов могу повторить - БАЗА РАБОТАЕТ ПО ДРУГОМУ ПРИНЦИПУ.

впрочем, никто не мешает тебе реализовать его на пхп.
если ты так любишь файлы.

а вообще, лучше бы тебе, конечно, не позориться, высказывая свои соображения про файлы.
Смотри, есть 2 поля, name и url, если поле url пустое, то это раздел, если не пустое, то ссылка. По моему тут все просто и 2 база тут не к чему, ну тебе видней, но я так думаю
ага, и принадлежность ссылки к разделу определяется всё тем же порядком, да?
Все ссылки, которые идут после раздела - относятся к нему.
я правильно понимаю?
 

mig

Guest
сделай поле "поднять" и пиши туда единицу
сортируй order by поднять,name
Ну вот ты щас объяснил, а я опять не понел :)
При нажатии на кнопку поднять мне в поле "поднять" надо написать +1,а при опустить -1, так чтоли?

Я, кажется, объяснил - как работает база.
для тугодумов могу повторить - БАЗА РАБОТАЕТ ПО ДРУГОМУ ПРИНЦИПУ.
Хорошо, пусть она работает по другому принципу, но работает же с такими же файлами.

ага, и принадлежность ссылки к разделу определяется всё тем же порядком, да?
Все ссылки, которые идут после раздела - относятся к нему.
я правильно понимаю?
Да, правельно.
 

Фанат

oncle terrible
Команда форума
При нажатии на кнопку поднять мне в поле "поднять" надо написать +1,а при опустить -1, так чтоли?
можно -1, можно ноль.
Хорошо, пусть она работает по другому принципу, но работает же с такими же файлами.
не надо тупить.
не с такими же.
И как же это соотносится с тем, что сегодня весь день вдалбливали в твою голову - что в базе не тт никакого порядка?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху