Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
SELECT
tb.*, tb2.name, tb2.body_m, tb3.catalog_id, tb4.status_id
FROM
product tb
LEFT JOIN ru_product tb2 ON tb2.product_id=tb.id
LEFT JOIN product_catalog tb3 ON tb3.product_id=tb.id
LEFT JOIN product_status_set tb4 ON tb4.product_id=tb.id
WHERE
tb.active='1' AND tb3.catalog_id=? AND tb3.product_id!='10'
GROUP BY tb.id
ORDER BY rand()
LIMIT 6
//Получаем запись
abstract public function getRecords($what='*',$where=NULL, $limit=NULL, $order=NULL,$join=NULL,$debug=false);
$db->
what($smt1)->
where($smt2)->
limit(23)->
order($smt3)->
join($smt4)->
getRecords($debug)
;
$sql = 'SELECT `smt1` FROM `smt2` ORDER BY `smt3` LIMIT 32';
$DB->getRecords($sql);
$db->
what($smt1)->
where($smt2)->
limit(23)->
order($smt3)->
getRecords($debug);
$dbNews->select(); // select всё же правильнее, чем getRecords
// VS
$query = 'SELECT * FROM `'. TBL_NEWS .'`';
$mysql->exec($query);
// примерчик посложнее
$filter = array('login'=>$_POST['login'], 'password'=>$_POST['password']);
$dbUsers->where($filter)->selectOneRow();
// VS
$query = 'SELECT * FROM `'. TBL_USERS .'` WHERE
`login`="'. $mysql->escape((string)$_POST['login']) .'"
AND `password`="'. $mysql->escape((string)$_POST['password']) .'"';
$mysql->exec($query);
$filter = array('active'=>1);
$cnt = $dbNews->where($filter)->getCount();
$pager = new Pager($cnt, 20);
$items = $dbNews->
where($filter)->
limit($pager->getLimit())->
select()
;
// $filter был создан один раз и использован дважды
class productsController {
protected $_defaultFilter = array(
'active'=>1,
'cnt_images > ' => 0 // картинок больше чем 0
);
public function indexAction() {
$filter = $this->_defaultFilter;
$filter['category_id'] = $_POST['catId'];
// ...
}
}
$fields = array(
'*',
'(SELECT COUNT(*) FROM `promo` WHERE ... ) AS `is_promo`'
);
$order = array('is_promo'=>DESC);
$dbProducts->
fields($fields)-> // метод fields() - это то что у автора метод what()
joinFromRels('categories', ' AND `caterory`.`active`=1')->
order($order)->
select()
;
ON
`categories`.`id` = `products`.`cat_id`
AND `categories`.`active`=1
$dbContinents->joinFromRels(array(
'countries' => array(
'towns' => array(
'streets',
'peoples'
),
),
));
// Для континентов подцепит страны, для стран подцепит города, а для городов подцепит улицы и людей.
согласитесь, не очень правильно мешать в одном месте билдер и SQL.dbFactory(MODEL_PRODUCTS)->
joinFromRels(MODEL_CATEGORIES)->
select()
;
// Обратите внимание, каждая конструкция автодополняется!
// по этому, печатать приходится только это:
dbF->(MP)->
JFR(MC)->
sel()
;
My_Db_Rels_GlobalList::addHasMany( ... );
My_Db_Rels_GlobalList::addMany2Many( ... ...);
new My_Module_News();
new My_Module_Users();
new My_Module_Catalog_Categories();
new My_Module_Catalog_Products();
...
Генератор SQL запросов на PHP