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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постраничная разбивка "наоборот", Узнать к какой страницы относиться id 
:(
    Опции темы
izOne
Дата 23.9.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

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



Есть разбивка на страницы и группы страниц, т.е.
... < 5 6 > ... < 7 8 > ... (предыдущая группа, страницы в группе, следующая группа)
Как это сделано уже сто раз написано. Вопрос в следующем: на кадой странице отображается по 10 товаров, у каждого свой id. Выбираем конкретный товар(переходим по ссылке, или сразу через поисковик) как определить к какой странице относиться данный товар?

Есть что-то типа SELECT OFFSET() AS `page` FROM `table`WHERE `id`='наш_ид' LIMIT 10?

PM Jabber   Вверх
izOne
Дата 23.9.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

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



Вот такое "горе" получилось если делать средствами пхп
Код

function oAssignLimits($arg, $oid){
    $dbi = &$this->dbIterator('
        SELECT `t1`.`sid`, COUNT(`t2`.`oid`) AS `cnt`
        FROM `'. $this->tables['items'].'` AS `t1`
        LEFT JOIN `'. $this->tables['items'] .'` AS `t2` ON (`t2`.`sid` = `t1`.`sid`)
        WHERE `t1`.`oid`='.$oid.'
        GROUP BY `sid`
        LIMIT 1
    ');
    if($dbi){
        $dbr = array_pop($dbi);
        $total = $dbr['cnt'];
    }
    $dbi = &$this->dbIterator('
        SELECT `t1`.`sid`, COUNT(`t3`.`oid`) AS `cnt`
        FROM `'. $this->tables['items'].'` AS `t1`
        LEFT JOIN `'. $this->tables['items'] .'` AS `t3` ON (`t3`.`sid` = `t1`.`sid` AND `t3`.`oid`<"'.$oid.'")
        WHERE `t1`.`oid`='.$oid.'
        GROUP BY `sid`
        LIMIT 1
    ');
    if($dbi){
        $dbr = array_pop($dbi);
        $before = $dbr['cnt'];
    }
    $gNow = (int)ceil(($before+1)/$this->lim[1]);
    $gTot = (int)ceil($total/$this->lim[1]);
    $pOff = (int)($gNow-1)*$this->lim[1];
    $pLim = (int)$this->lim[1];

    $aPrev = false;
    $aNext = false;
    if($gNow != 1){    // previous group
        $pOff--;
        $pLim++;
        $aPrev = true;
    }
    if($gNow !== $gTot){
        $pLim++;
        $aNext = true;
    }
    var_dump($pLim);
    $dbi = &$this->dbIterator('
        SELECT *
        FROM `'. $this->tables['items'].'`
        ORDER BY `oid`
        LIMIT '.$pOff.','.$pLim.'
    ');
    if($dbi){
        $i = ($gNow-1)*$this->lim[1]+1;
        // следующая группа
        if($aNext && $dbr=array_pop($dbi)){
            $_3 = '<a href="'. $this->bu.'o'.$dbr['oid'].'.html">&raquo;</a>&nbsp';
        }
        // предыдущая группа
        if($aPrev && $dbr = array_shift($dbi)){
            $_1 = '<a href="'. $this->bu.'o'.$dbr['oid'].'.html">&laquo;</a>&nbsp';
        }
        // страницы в тукущей группе
        $_2 = '';
        if(!empty($dbi) && $dbr = array_shift($dbi)){
            do{
                if($dbr['oid'] == $oid){
                    $_2 .= '<a href="'. $this->bu.'o'.$dbr['oid'].'.html' .'" class="a">'.$i.'</a>&nbsp';
                }else{
                    $_2 .= '<a href="'. $this->bu.'o'.$dbr['oid'].'.html' .'">'.$i.'</a>&nbsp';
                }
                $i++;                
            }while($dbr = array_shift($dbi));
        }
        $_ = $_1.$_2.$_3;
    }
}



Кто подскажет более правильный вариант? Жду...

Это сообщение отредактировал(а) izOne - 23.9.2005, 17:35
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
AntonioBanderaz
Дата 23.9.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


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

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



Ну можно немного проще.
Если сортировка идёт по id или по дате.
Узнаёшь параметр даты или id товара
Подчитываешь сколько у тебя товаров у которых дата больше чем дата твоего товара (больше это если сортировка последний добавленый - первый в списке) А дальше делишь с остатком на 10 и получаешь страницу на которой находится товар.

Для подсчёта используй
Код

SELECT count() as NOMER from table where date>you_date


Это сообщение отредактировал(а) AntonioBanderaz - 23.9.2005, 22:47


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
izOne
Дата 26.9.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

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



Ну собственно скрипт так и написан:
1. Всего товаров в категории
2. Товаров в категории до просматриваемого
3. Нужны ли ссылки "предыдущий" и "следующий" -> формирование SQL-запроса
4. Выборка товаров по запросу(п.3) + формирований ссылок

Просто мне кажется что можно сделать как-то проще...


--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
AntonioBanderaz
Дата 27.9.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


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

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



Да вроде и так не сложно...


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


 




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


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

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