Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> count () с лимитом 
:(
    Опции темы
NLspieler
Дата 28.7.2009, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пишу гостевую книгу. Точнее я ее уже полностью написал, но остался один не совсем решенный вопрос.

Дело в том, что есть одна функция, которая достаёт заданную страницу с сообщениями из базы данных.
В ней используется такой запрос:
Код

SELECT * FROM `$mes_table` ORDER BY `id` DESC $limit

//$limit хранит LIMIT, зависящий от номера страницы

Но тут мне понадобилась функция, которая вычисляет количество сообщений на заданной странице.
Не долго думая, я таким образом модернизировал этот запрос:

Код

SELECT count(*) FROM `$mes_table` ORDER BY `id` DESC $limit


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


Решил я проблему так, использовал запрос:
Код

SELECT `id` FROM `$mes_table` ORDER BY `id` DESC $limit

а результат пропустил через функцию mysql_num_rows() 

Такое решение оказалось рабочим, но очень не красивым. Зачем доставать данные, которые не используются?!

Есть ли способ решения на уровне SQL, без использования php?



 




Это сообщение отредактировал(а) NLspieler - 28.7.2009, 03:43
PM MAIL   Вверх
Wolf1994
Дата 28.7.2009, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

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



Количество сообщений на странице равно параметру $limit. Для крайней страницы можно пересчитать все сообщения, разделить на лимит, округлить до целых, умножить на $limit и найти между полученным значением и количеством всех сообщений разность - это и будет ответом.
PM MAIL WWW   Вверх
NLspieler
Дата 28.7.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 
Написал не сложную функцию, не отнимающую лишних ресурсов БД

Код

<?php

function count_of_page($page_num , $limit , $count)
{
    //$page_num   Номер страницы для проверки
    //$limit      Количество сообщений на 1 странице
    //$count      Количество всех сообщений в БД
    
    $num_of_last_page = ceil ( $count / $limit ) ; //Номер последней страницы
    if ($page_num > $num_of_last_page or $page_num < 1) return 0 ; 
    
    if ($page_num == $num_of_last_page)
    {
        $mes_on_last_page = $count % $limit ;
        if ($mes_on_last_page==0) $mes_on_last_page = $limit ;
        return $mes_on_last_page ;
    }
    return $limit ;
}
?>

PM MAIL   Вверх
Ипатьев
Дата 28.7.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



Цитата(NLspieler @  28.7.2009,  03:36 Найти цитируемый пост)
Но этот запрос работает совсем не так, как я ожидал.

Ну разумеется. Количество возвращаемых строк не превышает лимита.
И просто счастье, что этот способ не сработал, поскольку, как я понял, ты хотел выполнять столько запросов, сколько страниц в гостевой. 

Но непонятно, зачем вообще понадобилась такая функция. Зачем нужно знать количество сообений на других страницах?
PM MAIL   Вверх
NLspieler
Дата 29.7.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ипатьев @  28.7.2009,  09:42 Найти цитируемый пост)
Но непонятно, зачем вообще понадобилась такая функция.


Если пользователь - админ, то тогда появляется кнопочка удаления сообщения возле сообщений.

Если на нее нажать, происходит переход к срипту удаления. Ему передаются номер удаляемого сообщения и номер страницы с, которой оно удаляется. После удаления, происходит подсчет сообщений на странице, с которой удалилось сообщения, и если их больше нет, то происходит редирект на предидущую страницу. А если сообщения еще остались, то тогда происходит редирект на эту же страницу.


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

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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