|
|
|
| Здравствуйте Уважаемое сообщество.
У меня есть БД 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 кода можно использовать для этой задачи. | |
|
|
|
|
|
|
|
для: pautina
(06.01.2012 в 08:45)
| | Вам нужно исправить значения прямо в таблице или при выводе? Если в таблице, то лучше воспользоваться оператором UPDATE
UPDATE table_1
SET id = 201 - id
|
| |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: pautina
(07.01.2012 в 11:37)
| | это называется сортировка и решается средствами СУБД применением ключевого слова ORDER BY в запросе | |
|
|
|
|
|
|
|
для: pautina
(07.01.2012 в 11:37)
| | Это лучше действительно делать при выборке SELECT
SELECT * FROM table_1
ORDER BY id DESC
|
| |
|
|
|
|
|
|
|
для: cheops
(07.01.2012 в 14:09)
| | А как при этом обновить записи? | |
|
|
|
|
|
|
|
для: pautina
(07.01.2012 в 14:43)
| | А обновить что хотите?
PS Дело в том, что записи в таблице так не имеют фиксированного порядка - это дело базы данных, как она их хранит, сортировка данных всегда осуществляется при выборке оператором SELECT. Лучше не ориентироваться на физическую сортировку - она у вас будет постоянно сбиваться при удалении и вставке новых значений. Так базы данных устроены. | |
|
|
|
|
|
|
|
для: cheops
(07.01.2012 в 14:50)
| | Ну я обновить хотел изменения которые были при сорировке сделаны, | |
|
|
|
|
|
|
|
для: pautina
(07.01.2012 в 15:09)
| | сортируется только результат выборки перед отдачей этой самой выборки, в базе никаких сортировок не происходит
грубо говоря у вас вообще не должно быть SELECT без ORDER BY() | |
|
|
|
|
|
|
|
для: Valick
(07.01.2012 в 15:20)
| | Вообще и базу можно отсортировать, если например, нужно, чтобы дамп базы данных был упорядочен. Однако, к этому прибегают именно в таких ситуациях, в повседневной выборке, конечно же следует использовать ORDER BY - физическая сортировка таблицы, слишком дорогое удовольствие. | |
|
|
|
|
|
|
|
для: cheops
(07.01.2012 в 15:23)
| | не успел дописать, что это касается именно ORDER BY | |
|
|
|
|
|
|
|
для: pautina
(07.01.2012 в 15:09)
| | Дело в том, что такие обновления очень дороги и в общем не нужны - вы сможете физически реализовать только один вид сортировки, более того, эта физическая сортировка будет постоянно сбиваться (вообще она возможна, но не предназначена для повседневного использования - это инструмент администратора). Более правильным и более профессиональным подходом является использоваться ORDER BY. | |
|
|
|
|
|
|
|
для: cheops
(07.01.2012 в 15:21)
| | Можно ли каким либо образом сохранить результаты сортировки.
SELECT * FROM table_1
ORDER BY id DESC
|
чтоб в таблице первая запись была последней. | |
|
|
|
|
|
|
|
для: pautina
(25.01.2012 в 06:04)
| | Вам просто результат выборки БД выдаст в обратном порядке, т.е. первая запись будет в списке последней и наоборот. DESC означает сортировка по убыванию, а ASC по возрастанию. | |
|
|
|
|
|
|
|
для: Lotanaen
(25.01.2012 в 09:49)
| | Мне нужна не просто сортировка, а чтобы содержимое таблицы было обновлено. | |
|
|
|
|
|
|
|
для: pautina
(27.01.2012 в 14:13)
| | а вот нафиг это нужно сами-то понимаете?
вам не вортировка нужна, а нормальная книга по теме | |
|
|
|
|
|
|
|
для: Valick
(27.01.2012 в 14:43)
| | Это нужно для того чтобы когда я спарсю материалы определённых категорий.
Чтобы материалы находились в нужном порядке.
Чтоб материал на 1 месте стоял 1 а не последним.
Для этого нужна не просто сортировка по ID в обратном порядке, а обновление полей.
Как это можно сделать? | |
|
|
|
|
|
|
|
для: pautina
(27.01.2012 в 15:03)
| | оставьте id в покое, он нужен только для уникальности строки
просто добавьте поле в котором укажите порядок вывода
но сортировать по этому полю вам все равно придется
поймите вы наконец
и запомните раз и навсегда, запрос к базе без сортировки - это "ошибка" | |
|
|
|
|
|
|
|
для: Valick
(27.01.2012 в 15:07)
| | Как это сделать не подскажете? | |
|
|
|
|
|
|
|
для: pautina
(27.01.2012 в 16:59)
| | Ни скажете как добавить новое поле и указать порядок вывода. ну и сортировку сделать? | |
|
|
|
|
|
|
|
для: pautina
(03.02.2012 в 17:25)
| | Новое поле можно добавить при помощи оператора ALTER TABLE. Сортировку лучше делать при помощи ключевого слова ORDER BY.
PS Давайте лучше новую тему заведем под новые вопросы - обсуждение веселее пойдет. | |
|
|
|
|
|
|
|
для: pautina
(03.02.2012 в 17:25)
| | Ни скажете как добавить новое поле
phpmyadmin обычно помогает :)
указать порядок вывода
вот тут сложнее, либо руками указать, либо еще по какому хитрому алгоритму | |
|
|
|
|
|
|
|
для: Valick
(03.02.2012 в 17:33)
| | Имеется в виду физическая сортировка? Можно при помощи ALTER TABLE tbl ORDER BY fld. | |
|
|
|
|
|
|
|
для: 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 в обратном порядке | |
|
|
|
|
|
|
|
для: pautina
(04.02.2012 в 11:42)
| | Т.е. для ID = 1, это новое поле будет принимать значение 5, а для ID = 2, новое поле будет принимать значение 4? | |
|
|
|
|
|
|
|
для: cheops
(04.02.2012 в 12:22)
| | Да | |
|
|
|
|
|
|
|
для: pautina
(04.02.2012 в 11:42)
| | Посчитайте заранее количество элементов в таблице или вычислите максимальное значение ID, прибавьте к нему единицу и вычтите значение ID, так вы получите значение для нового столбца. Ниже приводится пример запроса, демонстрирующего сказанное.
UPDATE table_1
SET `Field 4` = 5 + 1 - ID
|
| |
|
|
|
|
|
|
|
для: 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 идёт по возрастанию.
Наверняка есть какой либо межанизм или алгоритм который может это сделать.
Как можно реализовать обновление? | |
|
|
|
|
|
|
|
для: pautina
(06.02.2012 в 06:35)
| | нужна не просто сортировка, а именно обновление полей где ID в Fielв 4 идёт по возрастанию
вы можете объяснить зачем это вам нужно?
- вы хотите совсем отказаться от ORDER BY ? так этого у вас никогда не получиться.
- если вам нужны порядковые номера строк, то их не хранят в таблице их формируют при выводе
- обычно создается поле для хранения времени добавления строки в базу, по нему и происходит сортировка как в прямом, так и в обратном порядке
- если нужен какой-то другой порядок, то создается поле в котором храниться "вес" (и это опять же не порядковый номер) строки, который в ходе работы может меняться, это достаточно сложная процедура и требует знания не только программирования, но и математики.
- и наконец самая главная ошибка всех начинающих программистов, это попытка избавиться от пропусков id после удаления строки, это делать категорически запрещено. | |
|
|
|