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

Форум MySQL

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

 

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

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

тема: Определить позицию результата
 
 автор: Osipov   (06.04.2007 в 17:49)   письмо автору
 
 

У меня есть база с картинками. Когда пользователь просматривает опредлённую картинку (известен идентификатор), нужно отобразить маленькие копии соседних. Меня интеревсует, как выбрать из базы строки которые при данном запросе находяться рядом с фиксированной. Если бы удалось узнать какой номер данной строки в данном результате, проблема была бы решена.

   
 
 автор: Trianon   (06.04.2007 в 18:20)   письмо автору
 
   для: Osipov   (06.04.2007 в 17:49)
 

Вам придется завести переменную-счетчик и наращивать её в цикле выборки результата.

   
 
 автор: Osipov   (06.04.2007 в 19:02)   письмо автору
 
   для: Trianon   (06.04.2007 в 18:20)
 

Можете по-подробнее?

   
 
 автор: Trianon   (06.04.2007 в 20:05)   письмо автору
 
   для: Osipov   (06.04.2007 в 19:02)
 

Конечно. Если приведете пример кода, который делает выборку.

   
 
 автор: Osipov   (09.04.2007 в 17:25)   письмо автору
 
   для: Trianon   (06.04.2007 в 20:05)
 

Скажем, выборка производиться SELECT id FROM image WHERE category='global' ORDER BY rate;

А нужный результат удовлетворяет условию id=100.

   
 
 автор: Trianon   (09.04.2007 в 18:14)   письмо автору
 
   для: Osipov   (09.04.2007 в 17:25)
 

Это запрос.
А php-код то где?
Должен быть некоторый цикл, выбирающий строки результата [и выводящий их в браузер]

Как он у Вас выглядит?

   
 
 автор: Osipov   (09.04.2007 в 18:39)   письмо автору
 
   для: Trianon   (09.04.2007 в 18:14)
 

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

   
 
 автор: Trianon   (09.04.2007 в 20:32)   письмо автору
 
   для: Osipov   (09.04.2007 в 18:39)
 

Напомню: Вас...
>...интеревсует, как выбрать из базы строки которые при данном запросе находяться рядом с фиксированной

Теперь же получается, что данного запроса у Вас нет. Вы его не запрашиваете. Раз нет запроса - то нет и результата запроса. Раз нет результата запроса - то (внимание!) нет порядка строк. Порядок строк может проявиться лишь в результате их вывода - в самой таблице он отсутствует.

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

Не так давно похожая тема проходила.
Поглядите: http://softtime.ru/forum/read.php?id_forum=3&id_theme=35618

   
 
 автор: Osipov   (10.04.2007 в 16:50)   письмо автору
 
   для: Trianon   (09.04.2007 в 20:32)
 

Мне удалось решить эту проблему. Вот решение:

SET @counter:=0;
SELECT @counter, id FROM image WHERE <условие1> HAVING ((@counter:=@counter+1) OR 1) AND <условие2> ORDER BY <порядок>;

Идея заключается в том, что перед каждой проверкой <условия2> увеличивается счётчик --- переменная mysql. Таким образом, первый столбец результата будет показывать номер строки среди всех результатов, удовлетворяющих <условию1> (а во втором столбце будут id результатов, удовлетворяющих одновременно <условию1> и <условию2>). Затем просто читается значение первого столбца единственной строки (<условие2>, как я говорил ограничивает множество ршений до одного результата), скажем $x, и производиться выборка

SELECT id FROM image WHERE <условие1> LIMIT $x-2, 5;

Выведет пять ближайших результатов.

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

   
 
 автор: Trianon   (10.04.2007 в 17:57)   письмо автору
 
   для: Osipov   (10.04.2007 в 16:50)
 

HAVING без GROUP BY - это не для меня.

По сути вопроса: критериев Вы так и не назвали.

   
Rambler's Top100
вверх

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