Класс 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;
Скачать исходники примера.
|