getValidators()
и добавить методы для формирования массива сценариев. $('input[name="login"]')
. Для div и подобных можно привязываться к недизайнерским классам + подселекторы.{login: 'habr', field: 'value'}
и на клиентской стороне обходил его и апдейтал присланые поля $('input[name="' + field + '"]').html(value)
CREATE DEFINER=`root`@`localhost` FUNCTION `FIND_CATEGORY_ROOT_ID`(category INT) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE root INT;
WHILE category IS NOT NULL DO
SET root = category;
SELECT parent_id INTO category FROM tree WHERE id = category;
END WHILE;
RETURN root;
END
bid -> blog_id, uid -> user_id, uid_add -> created_by, uid_upd -> updated_by, time_add -> created_at, url_name -> slug
NOT NULL
для этих полей. var tabs = {
autorefresh: {
page1: 15, // обновляет табу `page1` каждые 15 секунд
page2: 30
},
timers: {},
/**
* Отображаем табу и сразу же подписываем ее на автообновление если оно для нее предусмотрено
* @param tabName
*/
show: function(tabName) {
$.post("include/"+name+".php", function(content) {
// @todo Еже ли есть автообновление то думаю нужно кешить контент и обновляеть его только по таймауту
$('#content').empty().html(content);
// reschedule autorefresh
tabs.scheduleAutorefresh(name);
});
},
/**
* Делаем рефреш страниц
* @param tabName
*/
scheduleAutorefresh: function(tabName) {
// если у нас есть не отработаный таймаут для этой табы, то его нужно очистить перед тем как создавать новый
if (typeof(tabs.timers[tabName]) !== 'undefined')
clearTimeout(tabs.timers[tabName]);
// проверяем есть ли автообновление у табы
if (typeof(tabs.autorefresh[tabName]) !== 'undefined') {
tabs.timers[tabName] = setTimeout(function() {
tabs.show(tabName);
}, tabs.autorefresh[tabName] * 1000);
}
},
/**
* Тут мы показываем дефолтную табу при загрузке страницы
* + Можем подписать некоторые табы на автообновления (даже если пользователь еще ни разу их не открыл)
* @param defaultTab
*/
init: function(defaultTab) {
tabs.show(defaultTab);
// $.each(tabs.autorefresh, function(tabName) {
// tabs.scheduleAutorefresh(tabName);
// });
}
};
tabs.init('defaultTabName');
Innodb_buffer_pool_pages_free = 0
предположу, что следует увеличить innodb_buffer_pool_size
. -- checked on 4M rows
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company` int(11) NOT NULL,
`customer` int(11) NOT NULL,
`item` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `search` (`company`,`customer`,`item`)
) ENGINE=MyISAM AUTO_INCREMENT=4000001 DEFAULT CHARSET=utf8;
-- 1) ~ 2.2sec
SELECT company, count(customer) as `customers_count`
FROM (SELECT customer, company FROM test GROUP BY customer HAVING COUNT(DISTINCT item) > 5) as `temp`
GROUP BY company
ORDER BY customers_count DESC
LIMIT 100
-- 2) ~2.2sec
SET @rank = 0;
SELECT rank, company FROM (
SELECT @rank := @rank + 1 as `rank`, company FROM (
SELECT company, count(customer) as `customers_count`
FROM (SELECT customer, company FROM test GROUP BY customer HAVING COUNT(DISTINCT item) > 5) as `temp`
GROUP BY company
ORDER BY customers_count DESC
LIMIT 100
) as `temp2`
) as `temp3`
WHERE company = 159
abstract class DataKeeper {
protected $data;
public function setData($data) {
$this->data = $data;
}
public function getData() {
return $this->data;
}
abstract public function save()
abstract public function process()
}
class FileDataKeeper extend DataKeeper {
public function save() {
// implementation
}
public function process() {
// implementation
}
}
class Container {
protected static $classes = array();
public static function register($alias, $class) {
self::$classes[$alias] = $class;
}
public static function get($alias) {
if (!isset(self::$classes[$alias]))
throw new Exception("...");
$className = self::$classes[$alias];
return new $className();
}
}
// bootstrap.php
Container:register("dataKeeper", "FileDataKeeper");
// SomeWhere.php
$dataKeeper = Container::get("dataKeeper");