Пересортировка результата запроса к БД (resource of type (mysql result))

silvek

Новичок
Пересортировка результата запроса к БД (resource of type (mysql result))

Добрый вечер!

Такой вопрос:

в сценарии произвел запрос к БД
$r = mysql_query(... ORDER BY ID DESC);

Теперь хочу сделать так:
$r = mysql_query(... ORDER BY DATE DESC);

т.е. изменить параметр сортировки, но хочу сделать это без дополнительного поиска. Хотелось бы изменить в уже созданном ресорсе($r).

Это возможно?

Спасибо!
 

silvek

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

Фанат

oncle terrible
Команда форума
Зачем ещё раз производить выборку данных, но в другом порядке? Зачем вообще такое может понадобиться?

Ни одному человеку до тебя такое еще не приходило в голову.
 

phpdev2007

Новичок
silvek
хм, желания скорее всего и за того что неверно спроектирована база данных
 

silvek

Новичок
"ПО РЕЗУЛЬТАТАМ ОДНОГО И ТОГО ЖЕ ЗАПРОСА!" - это верно, то о чем я говорю.

Действительно, задача такова, что существует не доска объявлений конечно, но некая таблица многостраничная и по каждому полю реляционной БД можно сортировать.

Так вот можно по ID в прямом\обратном порядке, по дате, по любому полю, которое присутвует в таблице.

Можно произвести поиск, т.е. выбрать из 1 000 000 записей 50 и среди них уже производить пересортировку.

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

Надеюсь верно изложил свои мысли.

Спасибо!
 

phprus

Moderator
Команда форума
silvek
Вопрос в том, что мне не хочется каждый раз производить поиск заного, когда пользователь просто хочет пересортировать результат.
Когда пользователь захочет пересортировать результат по другому полю, то скрипт, который вывел ему результат уже давно закончил выполнятся. Следующий запрос пользователя к сайту будет выполнен новым запуском php-скрипта который не имеет никакого представления о ресурсах старого запроса.

У тебя похоже проблемы с пониманием работы HTTP протокола. Прочитай вот это: PHP FAQ: Самые основы. Отличие веб-приложения от обычной программы
 

cDLEON

Онанист РНРСlub
Эм...Ну коль данные не меняются, что мешает написать простенький "сортировщик" на яваскрипте? И кеш не нужен, и перезагрузок странички не будет....
 

Сергей Тарасов

Профессор
Это кстати вопрос к размышлению для товарищей, занимающихся разработкой внешнего кешера для MySQL! :))
Идея интересная.
 

baev

‹°°¬•
Команда форума
Мда, блин.

Можно произвести поиск, т.е. выбрать из 1 000 000 записей 50 и среди них уже производить пересортировку.

Вопрос в том, что мне не хочется каждый раз производить поиск заного, когда пользователь просто хочет пересортировать результат.
Результат чего?
Отсортировал все записи по ID, выбрал из них 50, а теперь эти выбранные по другому полю упорядочить?

Лично мне — как пользователю — было бы интересно упорядочить по другому полю все записи. А кому и зачем может понадобиться то сакральное действо, которое Вы описали, я себе представить не могу...

И ещё, тут принято показывать реальный код.
И если б Вы в первом посте не написали вместо реального кода свои фантазии на тему выборки без лимита, то и всего этого топика бы не было.
 

Major

Новичок
Я, вроде бы, понял что хочет топикстартер, но не совсем понял зачем он хочет сделать это именно таким образом, какой он описал. Либо человек не в курсе, как можно в 1м запросе сортировать записи сразу по нескольким полям, либо он хочет что-то, что ему одному известно.

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

Если все же хочется прямо в мускуле все делать, то что мешает сделать представление, и уже работать с ним, сортируя и выбирая, то что хочешь и как хочешь?

З.Ы.: Если я не уловил суть вопроса, то заранее извиняюсь.
 

QQQ

Новичок
До меня дошло! Может у топикстартера есть огромная табла, а на некоторых страницах его сайта ему требуются всегда лишь некоторые определённые результаты из неё (но в разной сортировке). Может так?

Тогда ему нужно либо кэшировать результаты запросов и вручную их после сортить. Либо создавать промежуточные таблицы c выбранными данными, только не забывать их обновлять.
 

Major

Новичок
Либо создавать промежуточные таблицы c выбранными данными, только не забывать их обновлять.
Если все же хочется прямо в мускуле все делать, то что мешает сделать представление, и уже работать с ним, сортируя и выбирая, то что хочешь и как хочешь?
???
 

QQQ

Новичок
Major
представление это что? это просто SQL запрос, при каждом обращении к нему - выборка идёт по всем данным.

если таблица(ы) очень большая(ые), и он не хочет каждый раз применять WHERE ко всем данным, он может создать таблицу с аналогичной структурой и положить в неё уже отобранные для некоего случая данные
 

QQQ

Новичок
то есть:

CREATE VIEW tview (field) AS SELECT field FROM table WHERE field > 100

Представь, что table имеет 10М записей и только первые 100 из них попадают под условие (возможные индексы опустим). Каждый раз при SELECT * FROM tview выборка будет вестись по 10М записей.

Или же мы можем раз в час (либо например при изменении table) делать следующее:

INSERT INTO table_tmp (value) VALUES (SELECT field FROM table WHERE field > 100)

тем самым получая table_tmp в которой всего 100 записей
 

QQQ

Новичок
Major
блин..

table_tmp - в моём пример - это таблица, а не представление

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

иногда намного выгоднее по ресурсам время от времени выбирать только нужные данные во временную (не путать с мускулскими temporary) таблицу и работать с ней
 

silvek

Новичок
"Если все же хочется прямо в мускуле все делать," - верно!

Ок, не побоюсь показаться глупым =)

Результат выборки mysql тот самый, который возвращает mysql_query он удаляется после отключения?

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

Я один раз произвел выборку и распределил строки на несколько страниц.

Допустим есть 3 поля в таблице id,date,name, хочу сортировать по любому из них средствами mysql.

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

Вариант с зогоном в массив в пхп каждой строки и работа с ним(сохраняя его в сесии, сортируя по мере необходимости) выглядит громозким, хотя именно так похоже и придется делать (.
 

baev

‹°°¬•
Команда форума
Я один раз произвел выборку и распределил строки на несколько страниц.
— угу.

Всё ясно. Вам сюда:
http://phpfaq.ru/na_tanke

(А на «советчиков»-фантазёров лучше внимание не обращайте — только время потеряете...)
 
Сверху