Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как отсортировать данные по критериям определенным в самих данных?
 
 автор: kosta_in_net   (04.01.2010 в 18:05)   письмо автору
 
 

естественно, если 1 таблица, то в ней невозможно отсортировать по критерию, хранящимуся в самой таблице (если, конечно, не сделать предварительный запрос). Кстати, кто сходу может написать его? Типа:
SELECT * FROM table ORDER BY (SELECT tipsortfield FROM table WHERE id=1)

Предположим, что tipsortfield хранит имя поля (столбца), по которому сортировать. Не думаю, что это может потребоваться для сортировки, но, тем не менее, как правильно данная конструкция выглядит?

А вот случай похитрее. Его МОЖЕТ БЫТЬ можно единым запросом сделать: В таблице table1 хранятся идентификаторы ТИПА записей, которым присваиваются различные параметры. Одним из таких параметров является способ сортировки записей данного типа. Сами эти записи хранятся в table2. В результате, чтобы получить записи нужного типа и их параметры, делаем запрос:

SELECT a.id,a.name,r.param FROM table2 a LEFT JOIN table1 r ON a.tip=r.id WHERE r.id=нужный_номер

Можно ли результат отсортировать в соответствии со значением поля r.tipsortfield (К примеру, там содердится значание "id" или "name", которое означает, что записи такого типа сортируются по номеру записи или по их имени), не делая предварительного запроса к table1? Какое тут может быть наиболее лаконичное решение?

  Ответить  
 
 автор: Trianon   (04.01.2010 в 22:17)   письмо автору
 
   для: kosta_in_net   (04.01.2010 в 18:05)
 

в таблицах не хранят метаданные.
Поэтому таких инструментов в языке SQL Вы не найдете.

  Ответить  
 
 автор: kosta_in_net   (04.01.2010 в 23:53)   письмо автору
 
   для: Trianon   (04.01.2010 в 22:17)
 

Если это пишешь ты, похоже действительно, способа нет .

  Ответить  
 
 автор: easywind   (08.01.2010 в 12:11)   письмо автору
 
   для: kosta_in_net   (04.01.2010 в 23:53)
 

Привет.
Может я не совсем понял. Сделай выборку из базы в массив данных. А потом делай с ним что хочеш!
Правда уточнение если у тебя не 5 гигов информации.

  Ответить  
 
 автор: kosta_in_net   (08.01.2010 в 13:02)   письмо автору
 
   для: easywind   (08.01.2010 в 12:11)
 

Делать что хочешь с выбранными данными мне не сложно: опыт php значительно больше чер опыт работы с sql. А вот с sql еще опыта маловато, порой возникают затруднения.

  Ответить  
 
 автор: easywind   (08.01.2010 в 17:50)   письмо автору
 
   для: kosta_in_net   (08.01.2010 в 13:02)
 

Тогда у тебя все равно будет 2 запроса, хоть вложеные но 2.
Первый узнает какие есть виды сортировки. Второй уже делает запрос с условиями сортировки.
Ты видел скрипт к книге "PHP практика создания веб сайтов". Скрипт "база недвижимости" там есть сортировка. Условия определены заранее, думаю потому, что так практичней и безопасней.

  Ответить  
 
 автор: kosta_in_net   (09.01.2010 в 00:09)   письмо автору
 
   для: easywind   (08.01.2010 в 17:50)
 

Если возможно сделать вложенными запросами, определив критерий сортировки в подзапросе, мне бы хотелось узнать, как это сделать. Не потому что я не могу сделать 2 запроса (в моей задаче 2 запроса делать было необходимо, так как первый выяснял не только сортировку, но и некоторые другие вещи). Тут у меня интерес чисто научный. Если это возможно, то как? Если кто-то знает, ответьте.

  Ответить  
 
 автор: easywind   (09.01.2010 в 22:59)   письмо автору
 
   для: kosta_in_net   (09.01.2010 в 00:09)
 

думаю никак. если незнаеш как копать (не запросив у базы) то все равно какая у тебя лопата.
Хорошо скрипт узнает как сортировать, что дальше? Как скрипт будет принимать решение как ему сортировать? он интелектуал? я так думаю пользователь должен принимать решение о сортировке.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 02:44)   письмо автору
 
   для: easywind   (09.01.2010 в 22:59)
 

ну это ты чё-то залудил.
В таблице А поле sort_by
В таблице Б поля name, citi... . Сортировка таблицы Б должна происходить в зависимости от того, что указано в поле sort_by, соответствующей записи первой таблицы. К примеру там есть значения name или citi. Соответственно, если в выбранной записи sort_by содержит citi, то сортировка таблицы Б должна происходить по полю citi.

Дальше по пунктам:

1) Хорошо скрипт узнает как сортировать, что дальше?
Дальше он отсортирует

2) Как скрипт будет принимать решение как ему сортировать?
Смотрим пункт первый. Иначе говоря, решение принимать буду я. Скрипт узнает (в первом пункте сделано такое допущение), какое я принял решение. Ему остается только выполнить это. Вопрос в том и состоит, можно ли одним запросом, с подзапросом, сообщить скрипту как сортировать и отсортировать сразу, не разделяя запросы на вде отдельных операции.

3) он интелектуал?
Нет, интеллектуал я ;)

  Ответить  
 
 автор: Eugene77   (12.01.2010 в 16:27)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 02:44)
 

Непонятна цель всего этого разговора.
Зачем?
Почему два запроса не устраивают.
Результат первого запроса можно записать в переменную, и через точку с запятой написать второй запрос, который уже вернёт результат в РНР.
Два раза mysql_query() писать не потребуется, а обращение к двум таблицам в любом случае неизбежно.

Так что, выходит, вы ищете неизвестно что...

  Ответить  
 
 автор: Trianon   (12.01.2010 в 17:13)   письмо автору
 
   для: Eugene77   (12.01.2010 в 16:27)
 

>Непонятна цель всего этого разговора.
>Зачем?
>Почему два запроса не устраивают.

Так сказать, закрыв глаза на вышеизложеное.


>Результат первого запроса можно записать в переменную, и через точку с запятой написать второй запрос, который уже вернёт результат в РНР.
>Два раза mysql_query() писать не потребуется, а обращение к двум таблицам в любом случае неизбежно.

Достаточно один раз?
Крайне интересно было бы ознакомиться с простейшим работающим примером.

  Ответить  
 
 автор: Eugene77   (13.01.2010 в 12:35)   письмо автору
 
   для: Trianon   (12.01.2010 в 17:13)
 

>Достаточно один раз?
>Крайне интересно было бы ознакомиться с простейшим работающим примером.

Что-то я не то сказал.
Так не получится.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 18:49)   письмо автору
 
   для: Eugene77   (12.01.2010 в 16:27)
 

я спрашиваю о принципиальной возможности или невозможности данного. Если это невозможно - бог с ним. Если возможно, мне интересно, как именно, чисто с научной точки зрения. То есть, никая нерешенная задача у меня не простаивает и я чувствую себя отлично. Но любопытство!...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования