Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выбрать последнее 
:(
    Опции темы
Alex0202
  Дата 28.5.2005, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Таблица:
Код

CREATE TABLE `members` (
  `oid`  integer(18) default NULL,
  `id` varchar(15) default NULL,
  `age` integer(2) default NULL,
  `country` varchar(35) default NULL,
  `state` varchar(3) default NULL,
  `city` varchar(50) default NULL,
  `sex`  varchar(8) default NULL,
  `lsex`  varchar(8) default NULL,
  `pwd`  varchar(15) default NULL,    
  `email`  varchar(35) default NULL
) TYPE=MyISAM;


Как мне выделить(отсортеравать) все начиная с последней добавленой запись ?
PM MAIL   Вверх
Black
Дата 28.5.2005, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: нет
Всего: 45



Цитата
Как мне выделить(отсортеравать) все начиная с последней добавленой запись ?


Если я правильно понял что вам надо тогда так:

Код

SELECT * FROM members ORDER BY id desc; 




--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Irokez
Дата 28.5.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 5
Всего: 53



Цитата(PHP @ 28.5.2005, 09:10)
SELECT * FROM members ORDER BY id desc;

тогда надо объявить ID как счетчик (auto_increment) или ввести дополнительное поле типа timestamp
PM   Вверх
Black
Дата 28.5.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: нет
Всего: 45



Irokez
ну я думаю Alex0202 занося ID делает ID++ smile

Если же ID будут иметь одинаковые значения нарушится условие
Цитата
начиная с последней добавленой записи


Это сообщение отредактировал(а) PHP-DIRECTOR - 28.5.2005, 14:43


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
sergejzr
Дата 28.5.2005, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Вообще разве они не автоматом выйдут начиная с последней, если просто сделать
Код

SELECT * FROM ...

Насколько я знаю во многих БД это именно так. Без доп. условий записи складываются по мере их добавления и выдаются в обратном порядке.
(Насчёт стандарта, не знаю... Вряд ли это так..)


Добавлено @ 14:49
Это конечно если tiestamp'a нет.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Irokez
Дата 28.5.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 5
Всего: 53



Цитата(sergej @ 28.5.2005, 14:49)
Вообще разве они не автоматом выйдут начиная с последней, если просто сделать

наоборот, начиная с первой, идут
PM   Вверх
sergejzr
Дата 28.5.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360




Тогда если нет timestamp, можно извратиться создав темп - таблицу и скопировав в неё данные + timestamp.
И выдавать наоборот smile




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Mal Hack
Дата 28.5.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Irokez @ 28.5.2005, 15:52)
наоборот, начиная с первой, идут


Цитата(sergej @ 28.5.2005, 15:49)
Вообще разве они не автоматом выйдут начиная с последней, если просто сделать


Если никакая сортировка не указана, то база выдаст записи, отсортированные по времени последнего добавления, т.е. так, в каком порядке они лежат в памяти. Первый зашел, последний вышел.

НО, после отсортированной выборки вполне возможно, что результат безсортированной выборки будет отсортирован так, как на данный момент в памяти данные лежат.
PM ICQ   Вверх
Гость_Alex0202
Дата 28.5.2005, 20:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











id это имя пользователя vasya , petya ...
Я знаю что можно использовать timestamp но нехотелось бы иметь лишних полей так как база будет 500,000+ записей
  Вверх
Irokez
Дата 28.5.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 5
Всего: 53



Цитата(Mal @ 28.5.2005, 20:04)
Если никакая сортировка не указана, то база выдаст записи, отсортированные по времени последнего добавления, т.е. так, в каком порядке они лежат в памяти. Первый зашел, последний вышел.

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

Цитата
id это имя пользователя vasya , petya ...
Я знаю что можно использовать timestamp но нехотелось бы иметь лишних полей так как база будет 500,000+ записей

по-моему все таки лучше ввести еще одно поле - дата регистрации, потому что насколько мне известно иначе получить искомую выборку в MySQL (MyISAM) невозможно
PM   Вверх
Mal Hack
Дата 28.5.2005, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Irokez @ 28.5.2005, 21:49)
может все таки наоборот? первая запись будет первой и в выборке

Может я опять туплю... То, что последним добавил первым выйдет в выборке. В любом случае зависит от того, как в данный конкретный момент в памяти таблица лежит.
PM ICQ   Вверх
Guest
Дата 28.5.2005, 21:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
id это имя пользователя vasya , petya ...
Я знаю что можно использовать timestamp но нехотелось бы иметь лишних полей так как база будет 500,000+ записей


Млин, а первичный ключ у тебя что? Хотяб во избежание дубликации строк следует ввести автоинкрементное поле. А также если в таблице не будет целочисленного id, как же будет производиться соединение?
Точнее, что потом даст EXPLAIN ?
  Вверх
Гость_Ignat
Дата 28.5.2005, 21:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это был Ignat smile
  Вверх
Alex0202
Дата 28.5.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



to Guest :
oid = mt_rand(999,999999);

PM MAIL   Вверх
Гость_Alex0202
Дата 29.5.2005, 18:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А может можно сделать например

Код

$res=mysql_query("SELECT * FROM `members`");


а потом перевернуть результат

Код

$res=reverse($res);

только как ??

array_reverse совсем не то ..

а идеально было бы есьи можно можно так:

Код

$res=mysql_query("SELECT * FROM `members` DESC");

smile
  Вверх
Irokez
Дата 29.5.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 5
Всего: 53



Цитата
только как ??

Код

$res=mysql_query("SELECT * FROM `members`");
$members = array();
while ($data = mysql_fetch_assoc($res)) {
    array_push($members, $data);
}
$members = array_reverse($members);

PM   Вверх
DENNN
Дата 30.5.2005, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 2
Всего: 43



Цитата(sergej @ 28.5.2005, 14:49)
Насколько я знаю во многих БД это именно так. Без доп. условий записи складываются по мере их добавления и выдаются в обратном порядке.

Могут выдаваться, а могут и нет. В любом случае это не постоянно, т.к. противоречит принципам доступа к информации в БД.
PM ICQ   Вверх
Ignat
Дата 30.5.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(Alex0202 @ 28.5.2005, 23:34)
oid = mt_rand(999,999999);

ИМХО, маразм. А почему бы "нормальный" ID не ввести в базу?


--------------------
Теперь при чем :P
PM   Вверх
Bikutoru
Дата 30.5.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Цитата
Если никакая сортировка не указана, то база выдаст записи, отсортированные по времени последнего добавления


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


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Гость_Alex0202
Дата 31.5.2005, 06:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Ignat @ 30.5.2005, 10:19)
Цитата(Alex0202 @ 28.5.2005, 23:34)
oid = mt_rand(999,999999);

ИМХО, маразм. А почему бы "нормальный" ID не ввести в базу?

Ну а как подругому ?
помимо таблицы `members` в которой определены oid(mt_rand()) и id(vasya) ... и другие поля,
есть ещё 7 таблиц в которых я орентируюсь по oid.
  Вверх
Гость_Alex0202
Дата 31.5.2005, 06:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(DENNN @ 30.5.2005, 08:30)
Цитата(sergej @ 28.5.2005, 14:49)
Насколько я знаю во многих БД это именно так. Без доп. условий записи складываются по мере их добавления и выдаются в обратном порядке.

Могут выдаваться, а могут и нет. В любом случае это не постоянно, т.к. противоречит принципам доступа к информации в БД.

Согласен , в базе нет порядка .
  Вверх
Гость_Alex0202
Дата 31.5.2005, 06:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Irokez @ 29.5.2005, 20:57)
Цитата
только как ??

Код

$res=mysql_query("SELECT * FROM `members`");
$members = array();
while ($data = mysql_fetch_assoc($res)) {
    array_push($members, $data);
}
$members = array_reverse($members);

Да.. это будет работать , но буду использовать это только в совсем крайний случай
  Вверх
lika
Дата 1.6.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.6.2005

Репутация: нет
Всего: нет



Можно поступить очень просто:
добавить поле даты создания, например createdate datetime
Во время insert сажать в него sysdate()
Во время выборки
SELECT * FROM members ORDER BY createdate desc;

Тогда будет гарантия, что первой появится именно последняя добавленная запись

Лика
PM MAIL   Вверх
Гость_Alex0202
Дата 2.6.2005, 00:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(lika @ 1.6.2005, 12:26)
Можно поступить очень просто:
добавить поле даты создания, например createdate datetime
Во время insert сажать в него sysdate()
Во время выборки
SELECT * FROM members ORDER BY createdate desc;

Тогда будет гарантия, что первой появится именно последняя добавленная запись

Лика

Возможно вы прочитали ни всё
Условие было : Сделать это недобавляя полей.
  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1277 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.