Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Замена id в таблице в обратном порядке

Сообщения:  [1-10]    [11-20]  [21-29] 

 
 автор: Valick   (06.02.2012 в 09:15)   письмо автору
 
   для: pautina   (06.02.2012 в 06:35)
 

нужна не просто сортировка, а именно обновление полей где ID в Fielв 4 идёт по возрастанию
вы можете объяснить зачем это вам нужно?
- вы хотите совсем отказаться от ORDER BY ? так этого у вас никогда не получиться.
- если вам нужны порядковые номера строк, то их не хранят в таблице их формируют при выводе
- обычно создается поле для хранения времени добавления строки в базу, по нему и происходит сортировка как в прямом, так и в обратном порядке
- если нужен какой-то другой порядок, то создается поле в котором храниться "вес" (и это опять же не порядковый номер) строки, который в ходе работы может меняться, это достаточно сложная процедура и требует знания не только программирования, но и математики.
- и наконец самая главная ошибка всех начинающих программистов, это попытка избавиться от пропусков id после удаления строки, это делать категорически запрещено.

  Ответить  
 
 автор: pautina   (06.02.2012 в 06:35)   письмо автору
 
   для: cheops   (05.02.2012 в 11:40)
 

Смотрите мы добавиль новый столбец Field 4

ALTER TABLE `table_1`   
ADD `Field 4` VARCHAR( 255 ) NULL   
AFTER `Field 3`

После изменили там нужным нам образом значение id

UPDATE table_1 
SET `Field 4` = 5 + 1 - ID

Теперь как мне обновить содержимое таблицы
нужна не просто сортировка, а именно обновление полей где ID в Fielв 4 идёт по возрастанию.
Наверняка есть какой либо межанизм или алгоритм который может это сделать.
Как можно реализовать обновление?

  Ответить  
 
 автор: cheops   (05.02.2012 в 11:40)   письмо автору
 
   для: pautina   (04.02.2012 в 11:42)
 

Посчитайте заранее количество элементов в таблице или вычислите максимальное значение ID, прибавьте к нему единицу и вычтите значение ID, так вы получите значение для нового столбца. Ниже приводится пример запроса, демонстрирующего сказанное.
UPDATE table_1
SET `Field 4` = 5 + 1 - ID

  Ответить  
 
 автор: pautina   (05.02.2012 в 08:30)   письмо автору
 
   для: cheops   (04.02.2012 в 12:22)
 

Да

  Ответить  
 
 автор: cheops   (04.02.2012 в 12:22)   письмо автору
 
   для: pautina   (04.02.2012 в 11:42)
 

Т.е. для ID = 1, это новое поле будет принимать значение 5, а для ID = 2, новое поле будет принимать значение 4?

  Ответить  
 
 автор: pautina   (04.02.2012 в 11:42)   письмо автору
 
   для: cheops   (03.02.2012 в 17:42)
 

Физическая сортировка или нет не могу сказать? До этого ничего подобного не реализовывал,
хотя задача вроде бы не сложная.
Нужно каким то образом отсортировать данные по id в обратном порядке и обновить содержимое таблицы.
Пусть у меня имеется table_1

CREATE TABLE IF NOT EXISTS table_1 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) TYPE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO table_1 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES  
('1','Уроки Photoshop 1','Рубрика: Эффекты 1','Содержимое контента 1'),
('2','Уроки Photoshop 2','Рубрика: Эффекты 2','Содержимое контента 2'),
('3','Уроки Photoshop 3','Рубрика: Эффекты 3','Содержимое контента 3'),
('4','Уроки Photoshop 4','Рубрика: Эффекты 4','Содержимое контента 4'),
('5','Уроки Photoshop 5','Рубрика: Эффекты 5','Содержимое контента 5')

Добавте поле в котором укажите порядок вывода (создаём новое поле Field 4)

ALTER TABLE `table_1`  
ADD `Field 4` VARCHAR( 255 ) NULL  
AFTER `Field 3`

Пока это поле пустое
нужно записать в него данные по ID в обратном порядке

  Ответить  
 
 автор: cheops   (03.02.2012 в 17:42)   письмо автору
 
   для: Valick   (03.02.2012 в 17:33)
 

Имеется в виду физическая сортировка? Можно при помощи ALTER TABLE tbl ORDER BY fld.

  Ответить  
 
 автор: Valick   (03.02.2012 в 17:33)   письмо автору
 
   для: pautina   (03.02.2012 в 17:25)
 

Ни скажете как добавить новое поле
phpmyadmin обычно помогает :)
указать порядок вывода
вот тут сложнее, либо руками указать, либо еще по какому хитрому алгоритму

  Ответить  
 
 автор: cheops   (03.02.2012 в 17:31)   письмо автору
 
   для: pautina   (03.02.2012 в 17:25)
 

Новое поле можно добавить при помощи оператора ALTER TABLE. Сортировку лучше делать при помощи ключевого слова ORDER BY.

PS Давайте лучше новую тему заведем под новые вопросы - обсуждение веселее пойдет.

  Ответить  
 
 автор: pautina   (03.02.2012 в 17:25)   письмо автору
 
   для: pautina   (27.01.2012 в 16:59)
 

Ни скажете как добавить новое поле и указать порядок вывода. ну и сортировку сделать?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-29] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования