Так после вывода из огромной таблицы, допустим, отсталось 4 строки.Соответственно id у всех разные и я их даже незнаю.Мне нужно узнать физический номер каждой строки. Для чего?
Чтобы дальше допустим выводить:
1 строка выводится так-то
2 строка выводится так-то и т.д.
Спустя 28 минут, 11 секунд (12.06.2010 - 10:26) vasa_c написал(а):
У строк в БД нет физического номера.
Спустя 1 час, 41 минута, 31 секунда (12.06.2010 - 12:08) maxims написал(а):
Цитата (vasa_c @ 12.06.2010 - 07:26) |
У строк в БД нет физического номера. |
наверное имелось ввиду фактическое положение строки, допустим
id: 1,2,3,4,7,8,9
а фактически в бд: 1,2,3,4,5,6,7
можно средствами php и sql, как надо?
P.S.: так и не понял для чего это надо, думаю можно и без этого обойтись.......
Спустя 26 минут, 7 секунд (12.06.2010 - 12:34) FatCat написал(а):
Цитата (Гость_Наталья @ 12.06.2010 - 10:58) |
физический номер строки |
Он меняется по мере работы с таблицей.
Правильней будет индексировать по первичному ключу.
Спустя 11 часов, 44 минуты, 43 секунды (13.06.2010 - 00:19) Nikitian написал(а):
Я так понимаю нужно объяснить про 2 параметра sql-оператора limit.
получаем все записи из таблицы:
Знаем, что записей больше, либо узнаём это модификатором SQL_CALC_FOUND_ROWS. Записей больше, чем полученные 50, соответственно надо вывести например следующие 20. Делаем так:
Использование order by {какое-нибудь поле} обязательно, т.к. записи в бд располагаются в псевдослучайном порядке (теоретически в myisam последовательно в порядке добавления, но это всё теория и в дургих движках/типах таблиц может быть по-другому) и доверять этому порядку не следует.
получаем все записи из таблицы:
select * from table order by id limit 50
Знаем, что записей больше, либо узнаём это модификатором SQL_CALC_FOUND_ROWS. Записей больше, чем полученные 50, соответственно надо вывести например следующие 20. Делаем так:
select * from table order by id limit 50,20
Использование order by {какое-нибудь поле} обязательно, т.к. записи в бд располагаются в псевдослучайном порядке (теоретически в myisam последовательно в порядке добавления, но это всё теория и в дургих движках/типах таблиц может быть по-другому) и доверять этому порядку не следует.
Спустя 54 минуты, 37 секунд (13.06.2010 - 01:13) FatCat написал(а):
Цитата (Nikitian @ 13.06.2010 - 01:19) |
теоретически в myisam последовательно в порядке добавления |
Именно так они располагаются, если посмотреть гекс-редактором сам файл таблицы.
Но лишь до тех пор, пока не было удалений и оптимизаций.
Спустя 19 минут, 40 секунд (13.06.2010 - 01:33) Nikitian написал(а):
Цитата (FatCat @ 12.06.2010 - 22:13) | ||
Именно так они располагаются, если посмотреть гекс-редактором сам файл таблицы. Но лишь до тех пор, пока не было удалений и оптимизаций. |
Какая-то сферическая таблица в вакууме. Да, такие накопительные таблицы есть, но... Апдейт с уменьшением размера записи может вынудить оптимизаторский алгоритм работы движка распределить малую по размеру запись в освободившееся пространство в середине данных. Встречался со сбиванием порядка в больших часто обновляемых таблицах, потому и предпочитаю всегда порядок устанавливать явно.
Спустя 46 минут, 46 секунд (13.06.2010 - 02:20) dr_Lev написал(а):
можно попробовать посчитать номер строки:
set @rownum:=-1;SELECT id, name, @rownum:=@rownum+1 AS rownum FROM table;в поле rownum будет номер с 0.
Спустя 19 часов, 41 минута, 51 секунда (13.06.2010 - 22:02) Гость_Наталья написал(а):
Цитата (dr_Lev @ 12.06.2010 - 23:20) |
можно попробовать посчитать номер строки:set @rownum:=-1;SELECT id, name, @rownum:=@rownum+1 AS rownum FROM table;в поле rownum будет номер с 0. |
Такую запись уже встречала, но никак не пойму как записывать ее с точки зрения синтаксиса.
Спустя 1 минута, 30 секунд (13.06.2010 - 22:03) Гость_Наталья написал(а):
Т.к. выборка по ORDER BY уже произошла, то все id сбились. Допустим осталось после выборки 4 записи и мне нужно узнать не номер id, а фактическое расположение в таблице, номер строки
Спустя 11 минут, 25 секунд (13.06.2010 - 22:15) twin написал(а):
Странная задача... А для чего это нужно вообще, очень любопытно?
Спустя 34 минуты, 33 секунды (13.06.2010 - 22:49) vasa_c написал(а):
Цитата |
Такую запись уже встречала, но никак не пойму как записывать ее с точки зрения синтаксиса. |
Я вам ещё десяток хитрож..х записей по этой теме накидаю, можете голову себе поломать если хотите.
А можете описать нормально изначальную задачу, которая наверняка решается элементарно.
Спустя 1 час, 15 минут, 11 секунд (14.06.2010 - 00:04) Гость_Наталья написал(а):
Ну вообще все можно решить средствами java script, но я его незнаю.
Поэтому нужен синтаксис set @rownum:=-1;SELECT id, name, @rownum:=@rownum+1 AS rownum FROM table;
Подскажите, если не сложно, как правильно написать. Хочу понять как правильно вывести номер строки, а дальше сама справлюсь
Поэтому нужен синтаксис set @rownum:=-1;SELECT id, name, @rownum:=@rownum+1 AS rownum FROM table;
Подскажите, если не сложно, как правильно написать. Хочу понять как правильно вывести номер строки, а дальше сама справлюсь
Спустя 1 час, 18 минут, 49 секунд (14.06.2010 - 01:23) Гость_Наталья написал(а):
Как сделать запрос в БД разобралась.Все получилось. Как вывести все это в PHP?Не понятно и возможно ли. И можно вообще с этим как-то работать?
Спустя 7 часов, 32 минуты, 6 секунд (14.06.2010 - 08:55) SlavaFr написал(а):
Цитата (Гость_Наталья @ 13.06.2010 - 22:23) |
Как сделать запрос в БД разобралась.Все получилось. Как вывести все это в PHP?Не понятно и возможно ли. И можно вообще с этим как-то работать? |