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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Замена id в таблице в обратном порядке
 
 автор: pautina   (06.01.2012 в 08:45)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
У меня есть БД bd_old в ней таблица table_1 таблица содержит 4 столбца (id, name, content, img)
В таблице например 200 записей (по id для 1 строки и последней id=1, до id=200)
Какой участок php кода можно использовать чтобы заменить id в обратном порядке.

1   name_1   content_1   img_1
2   name_2   content_2   img_2
3   name_3   content_3   img_3
...
200   name_200   content_200   img_200

содержимое строк остаётся таким же идёт сортировка что ли по id в обратном порядке

200   name_1   content_1   img_1
199   name_2   content_2   img_2
198   name_3   content_3   img_3
...
3   name_198   content_198   img_198
2   name_199   content_199   img_199
1   name_200   content_200   img_200

Какой участок php кода можно использовать для этой задачи.

  Ответить  
 
 автор: cheops   (06.01.2012 в 12:51)   письмо автору
 
   для: pautina   (06.01.2012 в 08:45)
 

Вам нужно исправить значения прямо в таблице или при выводе? Если в таблице, то лучше воспользоваться оператором UPDATE
UPDATE table_1
SET id = 201 - id

  Ответить  
 
 автор: pautina   (07.01.2012 в 11:37)   письмо автору
 
   для: cheops   (06.01.2012 в 12:51)
 

Извиняюсь в 1 сообщении не правильно описал.
Сейчас меняется только ID, а как сделать чтобы менялось и ID и содержимое строки
1   name_1   content_1   img_1 
2   name_2   content_2   img_2 
3   name_3   content_3   img_3 
... 
200   name_200   content_200   img_200

чтобы

200   name_200   content_200   img_200 
199   name_199   content_199   img_199 
198   name_198   content_198   img_198
... 
3   name_3   content_3   img_3 
2   name_2   content_2   img_2 
1   name_1   content_1   img_1

  Ответить  
 
 автор: Valick   (07.01.2012 в 12:06)   письмо автору
 
   для: pautina   (07.01.2012 в 11:37)
 

это называется сортировка и решается средствами СУБД применением ключевого слова ORDER BY в запросе

  Ответить  
 
 автор: cheops   (07.01.2012 в 14:09)   письмо автору
 
   для: pautina   (07.01.2012 в 11:37)
 

Это лучше действительно делать при выборке SELECT
SELECT * FROM table_1 
ORDER BY id DESC

  Ответить  
 
 автор: pautina   (07.01.2012 в 14:43)   письмо автору
 
   для: cheops   (07.01.2012 в 14:09)
 

А как при этом обновить записи?

  Ответить  
 
 автор: cheops   (07.01.2012 в 14:50)   письмо автору
 
   для: pautina   (07.01.2012 в 14:43)
 

А обновить что хотите?

PS Дело в том, что записи в таблице так не имеют фиксированного порядка - это дело базы данных, как она их хранит, сортировка данных всегда осуществляется при выборке оператором SELECT. Лучше не ориентироваться на физическую сортировку - она у вас будет постоянно сбиваться при удалении и вставке новых значений. Так базы данных устроены.

  Ответить  
 
 автор: pautina   (07.01.2012 в 15:09)   письмо автору
 
   для: cheops   (07.01.2012 в 14:50)
 

Ну я обновить хотел изменения которые были при сорировке сделаны,

  Ответить  
 
 автор: Valick   (07.01.2012 в 15:20)   письмо автору
 
   для: pautina   (07.01.2012 в 15:09)
 

сортируется только результат выборки перед отдачей этой самой выборки, в базе никаких сортировок не происходит
грубо говоря у вас вообще не должно быть SELECT без ORDER BY()

  Ответить  
 
 автор: cheops   (07.01.2012 в 15:23)   письмо автору
 
   для: Valick   (07.01.2012 в 15:20)
 

Вообще и базу можно отсортировать, если например, нужно, чтобы дамп базы данных был упорядочен. Однако, к этому прибегают именно в таких ситуациях, в повседневной выборке, конечно же следует использовать ORDER BY - физическая сортировка таблицы, слишком дорогое удовольствие.

  Ответить  
 
 автор: Valick   (07.01.2012 в 15:23)   письмо автору
 
   для: cheops   (07.01.2012 в 15:23)
 

не успел дописать, что это касается именно ORDER BY

  Ответить  
 
 автор: cheops   (07.01.2012 в 15:21)   письмо автору
 
   для: pautina   (07.01.2012 в 15:09)
 

Дело в том, что такие обновления очень дороги и в общем не нужны - вы сможете физически реализовать только один вид сортировки, более того, эта физическая сортировка будет постоянно сбиваться (вообще она возможна, но не предназначена для повседневного использования - это инструмент администратора). Более правильным и более профессиональным подходом является использоваться ORDER BY.

  Ответить  
 
 автор: pautina   (25.01.2012 в 06:04)   письмо автору
 
   для: cheops   (07.01.2012 в 15:21)
 

Можно ли каким либо образом сохранить результаты сортировки.

SELECT * FROM table_1  
ORDER BY id DESC

чтоб в таблице первая запись была последней.

  Ответить  
 
 автор: Lotanaen   (25.01.2012 в 09:49)   письмо автору
 
   для: pautina   (25.01.2012 в 06:04)
 

Вам просто результат выборки БД выдаст в обратном порядке, т.е. первая запись будет в списке последней и наоборот. DESC означает сортировка по убыванию, а ASC по возрастанию.

  Ответить  
 
 автор: pautina   (27.01.2012 в 14:13)   письмо автору
 
   для: Lotanaen   (25.01.2012 в 09:49)
 

Мне нужна не просто сортировка, а чтобы содержимое таблицы было обновлено.

  Ответить  
 
 автор: Valick   (27.01.2012 в 14:43)   письмо автору
 
   для: pautina   (27.01.2012 в 14:13)
 

а вот нафиг это нужно сами-то понимаете?
вам не вортировка нужна, а нормальная книга по теме

  Ответить  
 
 автор: pautina   (27.01.2012 в 15:03)   письмо автору
 
   для: Valick   (27.01.2012 в 14:43)
 

Это нужно для того чтобы когда я спарсю материалы определённых категорий.
Чтобы материалы находились в нужном порядке.
Чтоб материал на 1 месте стоял 1 а не последним.
Для этого нужна не просто сортировка по ID в обратном порядке, а обновление полей.
Как это можно сделать?

  Ответить  
 
 автор: Valick   (27.01.2012 в 15:07)   письмо автору
 
   для: pautina   (27.01.2012 в 15:03)
 

оставьте id в покое, он нужен только для уникальности строки
просто добавьте поле в котором укажите порядок вывода
но сортировать по этому полю вам все равно придется
поймите вы наконец
и запомните раз и навсегда, запрос к базе без сортировки - это "ошибка"

  Ответить  
 
 автор: pautina   (27.01.2012 в 16:59)   письмо автору
 
   для: Valick   (27.01.2012 в 15:07)
 

Как это сделать не подскажете?

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

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

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

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

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

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

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

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

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

  Ответить  
 
 автор: 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   (04.02.2012 в 12:22)   письмо автору
 
   для: pautina   (04.02.2012 в 11:42)
 

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

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

Да

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

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

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

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

  Ответить  
Rambler's Top100
вверх

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