SELECT DISTINCT `a`.`attribute_id`, `a`.`text`
FROM (
SELECT DISTINCT `p`.`id`
FROM `product` AS `p`
JOIN `product_category` AS `c` ON `c`.`product_id` = `p`.`id`
AND `c`.`category_id` = :categoryId
JOIN `product_attribute` AS `a1` ON `a1`.`product_id` = `p`.`id`
AND `a1`.`attribute_id` = :attribute1 AND `a1`.`text` = :attrValue1
JOIN `product_attribute` AS `a2` ON `a2`.`product_id` = `p`.`id`
AND `a2`.`attribute_id` = :attribute2 AND `a2`.`text` = :attrValue2
...
JOIN `product_attribute` AS `aN` ON `aN`.`product_id` = `p`.`id`
AND `aN`.`attribute_id` = :attributeN AND `aN`.`text` = :attrValueN
) AS `pr`
JOIN `product_attribute` AS `a` ON `a`.`product_id` = `p`.`id`
WHERE `a`.`attribute_id` NOT IN (:attribute1, :attribute2,... attributeN)
ORDER BY `a`.`attribute_id, `a`.`text`
По размеру ограничений почти что нет. Firefox ограничивает только размерами жесткого диска, но при условии, что на каждые дополнительные 50 мегабайт потребуется подтверждение пользователя. Chrome может занять под базы данных всех веб-страниц, которые их создали, половину жесткого диска, при этом ограничивая каждую базу данных 20% от этой половины.
function getXPath( element )
{
var xpath = '';
for ( ; element && element.nodeType == 1; element = element.parentNode )
{
var id = $(element.parentNode).children(element.tagName).index(element) + 1;
id > 1 ? (id = '[' + id + ']') : (id = '');
xpath = '/' + element.tagName.toLowerCase() + id + xpath;
}
return xpath;
}
function DB() {
this.token = function(req) {
return Token.findOne({token: req.token}, function(err, token) {
.....
.....
})
}
}
DB.prototype.add = function (req, res, next) {
var token = this.token(req);
}
DB.prototype.addToSource = function (req, res, next) {
var token = this.token(req);
}
// остальние методы
module.exports = new DB;
function getPxDiag(){
var scW = screen.width, scH = screen.height;
//return Math.hypot(scW, scH) - не работает в IE
return Math.sqrt( Math.pow(scW, 2) + Math.pow(scH, 2) );
}
<div id="inch" style="width:1in;"></div>
//Общая формула: PIXEL = INCHES / (1 / DPI);
function getInchDiag(){
var DPI = inch.offsetWidth;
return getPxDiag() * (1/DPI);
}
alert( getInchDiag() );
1in
, соотвественно, имеет ширину меньше, чем реальный дюйм. parent.postMessage(JSON.stringify({key: 'value'}), 'http://адрес-родительского-окна');
function handlerMessage(e){
var data = JSON.parse(e.data);
var origin = e.origin;
if(origin !== 'http://адрес_iframe'){
return false;
}
// здесть можно использовать data как объект.
}
if(window.addEventListener){
window.addEventListener('message', handlerMessage);
} else {
window.attachEvent('message', handlerMessage);
}
SELECT
id, (
3959 * acos (
cos ( radians(60.0000) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(30.0000) )
+ sin ( radians(60.0000) )
* sin( radians( lat ) )
)
) AS distance
FROM markers
HAVING distance < 30
ORDER BY distance
LIMIT 0 , 20;