Классы
Работа с классом Criteria
Написал andrey3761 в 26.06.2010 20:50:00 (3387 прочтений)

Класс Criteria создан для создания критериев выборки из БД.
Сначала объявляем класс
$criteria = new CriteriaCompo();
Затем вставляем в него элементы
$criteriaKeywords->add(new Criteria('page_title1', "%$page_title1%", 'LIKE'), 'OR');
$criteriaKeywords->add(new Criteria('page_title2', "$page_title2", '='), 'OR');
Для получения условия выборки используют
$criteria->renderWhere();
 



Пример исользования класса:

// Работа с классом Criteria

include_once 'mainfile.php';

$offset = 10;
$limit = 20;
$sort = 'title';
$order = 'ASC';
$group = 'title';

$andor = 'AND';
$queryarray = array();
$queryarray[] = '111';
$queryarray[] = '222';
$queryarray[] = '333';

// Объявляем класс
$criteria = new CriteriaCompo();
// По какому полю сортировать данные
$criteria->setSort($sort);
// В каком порядке сортировать данные ASC/DESC
$criteria->setOrder($order);
// С какой строки выбирать
$criteria->setStart($offset);
// Размер выборки
$criteria->setLimit($limit);
// По какому полю группировать данные
$criteria->setGroupby($group);

for($i = 0, $co = sizeof($queryarray); $i < $co; $i++) { //прогоняемся по всем ключевым словам и на каждое создаем условия для запроса с нужным условием

    $criteriaKeywords = new CriteriaCompo();
    //Простое перечисление полей для поиска
    $criteriaKeywords->add(new Criteria('page_title1', "%$queryarray[$i]%", 'LIKE'), 'OR');
    $criteriaKeywords->add(new Criteria('page_title2', "$queryarray[$i]", '='), 'OR');
    $criteriaKeywords->add(new Criteria('page_title3', '('.implode(',', $queryarray).')', 'IN'), 'OR');
    $criteria->add($criteriaKeywords, $andor);
    unset($criteriaKeywords);
}

// Составляем запрос к БД
$sql = "SELECT title FROM table_name " . $criteria->renderWhere() . " " . $criteria->getGroupby() . " " . " ORDER BY " . $criteria->getSort() . " " . $criteria->getOrder() . " LIMIT " . $criteria->getStart() . ", " . $criteria->getLimit();

// Выводим запрос на экран
// SELECT title FROM table_name WHERE ((page_title1 LIKE '%111%' OR page_title2 = '111' OR page_title3 IN (111,222,333)) AND (page_title1 LIKE '%222%' OR page_title2 = '222' OR page_title3 IN (111,222,333)) AND (page_title1 LIKE '%333%' OR page_title2 = '333' OR page_title3 IN (111,222,333))) GROUP BY title ORDER BY title ASC LIMIT 10, 20
echo $sql;

 

Скачать исходники примера.


Теги: Класс   Criteria  
Версия для печати Отправить эту статью другу Создать из статьи PDF-файл

Похожие новости

Работа с классом Preload

Для начала нужно в нужных модулях создать папку preloads и положить в неё *.php файлы с правильными именами (core.php плагин для файлов ядра). В файлах плагинах...

Класс XoopsPreload

Данный класс предназначен для подключения произвольного кода в системные файлы, не изменяя последние. Он появился в версии XOOPS 2.4.0.

Класс XoopsMySQLDatabase

Данный класс предназначен для зпроссов к базе данных MySQL. Данный класс является наследником класса XoopsDatabase. Исходник класса находится в файле...

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Отправитель Нити
Varefo
 Re: Работа с классом Criteria
Новичок
Дата регистрации: 30.10.2010
От: Москва
Сообщений: 1
Отправлено: 30.10.2010 14:28  Обновлено: 31.10.2010 3:40
спасибо большое

Кто активен

10 пользователь(ей) активно (2 пользователь(ей) просматривают Новости)

Участников: 0
Гостей: 10

далее...

Рекомендуем