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

Форум MySQL

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

 

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

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

тема: последняя страница (навигация)
 
 автор: а-я   (05.09.2008 в 03:32)   письмо автору
 
 

такая проблема.
форум... в темах некоторые посты видно тому или иному юзеру, а некоторые нет.
вот мне надо вывести последню страницу...

т.е. я не хочу 2 раза сканировать таблицу.
и хочу узнать сколько всего постов через SELECT FOUND_ROWS()


вот мне как то надо узнать start - внутри запроса...

что-то вроде
SELECT * FROM `tbl` WHERE ... LIMIT ceil(count(`ID`)/$list) * $list, $list


такое возможно?

  Ответить  
 
 автор: а-я   (05.09.2008 в 18:51)   письмо автору
 
   для: а-я   (05.09.2008 в 03:32)
 

видать невозможно такое... =)

  Ответить  
 
 автор: Trianon   (05.09.2008 в 19:09)   письмо автору
 
   для: а-я   (05.09.2008 в 18:51)
 

>видать невозможно такое...
...понять.

  Ответить  
 
 автор: а-я   (05.09.2008 в 23:46)   письмо автору
 
   для: Trianon   (05.09.2008 в 19:09)
 

Да, извините.
На данный момент скрипт работает примерно таким способом:

<?
 $list 
10// кол-во сообщений на 1 стр

 
$PAGE = empty($_REQUEST['page']) || !ctype_digit($_REQUEST['page']) ? intval($_REQUEST['page']);

 
$start = ($PAGE-1) * $list;

 
$sql 'SELECT SQL_CALC_FOUND_ROWS * FROM `forum` ORDER BY `ID` DESC LIMIT '.$start.','.$list;

 
$_MS mysql_query($sql);
 
 
$ALL mysql_result(mysql_query('SELECT FOUND_ROWS()'),0); // всего сообщений

 
$PAGES ceil($ALL/$list); //всего страниц
?>


Вот теперь мне нужно, чтоб была возможность, сразу перейти на последнюю страницу.

Т.е. количество сообщений получаем в конце…
и до основного запроса, я не могу узнать с какой позиции начинаются сообщения «последней страницы»… переменная $start

поэтому мне как-то надо узнать внутри основного запроса, с какой позиции надо сделать выборку…
что-то вроде:

SELECT SQL_CALC_FOUND_ROWS * FROM `forum` ORDER BY `ID` DESC LIMIT (ceil(count(`ID`)/$list) * $list), $list

  Ответить  
 
 автор: Trianon   (05.09.2008 в 23:55)   письмо автору
 
   для: а-я   (05.09.2008 в 23:46)
 

Что-то я не понимаю...
А SELECT * FROM FORUM ORDER BY id ASC LIMIT 10 не позволяет совесть?
А просто SELECT COUNT(*) FORUM ?

  Ответить  
 
 автор: а-я   (06.09.2008 в 00:00)   письмо автору
 
   для: Trianon   (05.09.2008 в 23:55)
 

Ну… так сказать на «последней странице» может быть и не 10 сообщений…
При навигации...
А если через SELECT COUNT(*) FORUM, то получается мы 2 раза полностью смотрим таблицу… не очень хочется таким образом… но видать по-другому никак…

  Ответить  
 
 автор: Trianon   (06.09.2008 в 00:10)   письмо автору
 
   для: а-я   (06.09.2008 в 00:00)
 

SELECT COUNT(*) смотрит таблицу?!

  Ответить  
 
 автор: а-я   (06.09.2008 в 00:14)   письмо автору
 
   для: Trianon   (06.09.2008 в 00:10)
 

нет... но просто там много условий... очень большой запрос...

я же говорю, некоторые сообщения видно, некоторые нет.

а голый COUNT(*) -вернет сколько всего сообщений на весь форум
///////////////////////////////
Т.е. например, в этом форуме в разделе «Форум MySQL» 1312 тем

Навигация показывает:
[1-30] [31-60] [61-90] [91-120] [121-150] ... [1291-1312] [архив]

Если перейти на [1291-1312] то там не все 30 записей, как на предыдущих страницах, а только 22.

Вот мне эти 22 надо показать…

т.е. как бы
http://softtime.ru/forum/index.php?page=END&id_forum=3

  Ответить  
 
 автор: Trianon   (06.09.2008 в 00:26)   письмо автору
 
   для: а-я   (06.09.2008 в 00:14)
 

SELECT SQL_CALC_FOUND_ROWS * FROM `forum` ORDER BY `ID` ASC LIMIT 10
SELECT FOUND_ROWS()
Вычисляете остаток последней страницы.
Выводите записи в порядке обратном сортируемому в количестве этого остатка.
Вуаля.
PS. потребуется mysql_data_seek()

  Ответить  
 
 автор: а-я   (06.09.2008 в 00:40)   письмо автору
 
   для: Trianon   (06.09.2008 в 00:26)
 

О, Боже! =)
Как же Вы мне помогли, не смотря на мои неправильно сформулированные вопросы…
Огромное спасибо! =)
Это то, что мне нужно!
Все, побежал дальше чудить! =)

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

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