Обновление таблицы SQL с новым столбцом - PullRequest
3 голосов
/ 27 ноября 2011

Я использую mysql и у меня есть таблица со столбцами: postid, userid, datetamp

Я хочу создать новый столбец с именем 'entry', который нумерует записи в хронологическом порядке в соответствии с отметкой даты

Итак, для строк:

3705    1   2003-12-08 13:42:13
3711    15  2003-11-12 15:22:01
3701    2   2004-01-11 01:22:12

Я хочу закончить с:

3705    1   2003-12-08 13:42:13 2
3711    15  2003-11-12 15:22:01 1
3701    2   2004-01-11 01:22:12 3

Как я могу выполнить эту задачу?

Ответы [ 3 ]

1 голос
/ 27 ноября 2011
ALTER TABLE tbl ADD COLUMN nr integer;

SET @rn := 0;

UPDATE tbl
SET    rn = (@rn := @rn + 1)
ORDER  BY datestamp, postid, userid;

Вот рабочая демонстрация .

Я взял замену отсутствующей оконной функции row_number() в MySQL из @ OMG Ponies 'Posting .
Сортировка по postid и userid в дополнение к datestamp, поскольку столбец меток времени не гарантирует уникальности.
Подробнее о настройке переменных в руководстве .

0 голосов
/ 27 ноября 2011

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

private static String[] FROM = {_ID, COL_1, COL_NAME, COL_2, COL_3, COL_4}; //add your columns
private static String ORDER_BY = COL_NAME + " DESC"; //or ASC for ascending
Cursor cursor = db.query(DATABASE_TABLE, FROM, null, null, null, null, ORDER_BY);

, а затем просто показать результаты с курсора

0 голосов
/ 27 ноября 2011
ALTER TABLE tbl ADD COLUMN entry INTEGER

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Для того, чтобы установить для него упорядоченный номер, вы должны использовать функцию RANK, но в MySQL ее нет, поэтому придется искать заменители, подобные этой: http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...