Archive for the ‘mySql’ Category

Быстрый набор для ремонта баз

Friday, October 30th, 2009

Движение 1: проверяем на битые таблици

mysqlcheck -p -uuser dbname

Движение 2: ремонтируем их

repair table table_name

Групировка по дням

Thursday, June 18th, 2009

created = поле с unix timestamp

SELECT count(nid), FROM_UNIXTIME(n.created, ‘%Y %d %m’) as created_day  FROM node n group by created_day

Список пользователей зарегистрированных за последние 24 часа в Друпале

Tuesday, April 7th, 2009
select mail from users where status=1 and
unix_timestamp(date_sub(now(), interval 24 hour)) <= created

COUNT против EXISTS

Wednesday, April 1st, 2009

один из способов проверить еслть ли запись в mysql это дать запрос с использование Count

Select count(id) from some_table where ....

Другой использовать функцию Exists

Select exists(select * form some_table where ....)

на первый взгляд делают они одно и тоже кроме того что есть большая разница в скорости. Вот результаты тестов на таблице с 120.000.000 записями


SELECT COUNT(*)
21 min 47.54 sec
SELECT * from table limit 1;
0.25 sec
select id from table limit 1;
0.29 sec
SELECT IF EXISTS…
0.03 seconds

Получить новое за день, неделю и месяц

Wednesday, March 25th, 2009

В таблице есть поле created где ввиде timestamp указана дата публикации статьи. С помошью запроса можно получить

статьи за день

SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) = CURRENT_DATE();

за неделю

SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) > Date_sub(CURRENT_DATE(), INTERVAL 1 WEEK )

и за месяц

SELECT nid, title FROM node n where FROM_UNIXTIME(created, ‘%Y-%m-%d’) > Date_sub(CURRENT_DATE(), INTERVAL 1 MOUTH )

toggle для mysql

Wednesday, February 18th, 2009

UPDATE ml SET cron = (SELECT if(cron = 0,”1″,”0″)) WHERE yid = %d

LOWER в Mysql

Monday, December 29th, 2008

Предположим у вас в колонке данные с разным регистром

Коля
вася
Игорь

И предположим вам нужно найти васю, но вам неизвестно в каком регистре используется его имя, для этого воспользуемся функцией LOWER()

SELECT lower(t.name) FROM term_data t WHERE lower(t.name) = lower(’Вася’)

при таком запросе и не только поиск но и вывод будет в нижнем регистре

так же и работает и UPPER()

Как быть с null

Tuesday, December 23rd, 2008

Для того что бы проверить null значение поля не стоит использовать рыбку (<>) для этого есть встроенные

IS NULL
IS NOT NULL;

Фильт по длине текста в поле

Tuesday, December 23rd, 2008
SELECT ru FROM dict2 d where length(ru) = 135

В этом запросе будут показывать строки где в длина не первышает 135 символов

Класс для сборки Mysql

Friday, March 21st, 2008

Ниже приведенный класс позволяет унифицировать составление запросов. Удобно тем, что попутно в каждый метод класса можно добавлять проверки и прочее необходимое

class DBManager {
	private $selectables = array();
	private $table;
	private $whereClause;
	private $limit;
public function select(){
	$this->selectables=func_get_args();
	return $this;
}
public function from($table) {
	$this->table = $table;
	return $this;
}
public function where($clause) {
	$this->whereClause = $clause;
	return $this;
}
public function limit($limit) {
	$this->limit = $limit;
	return $this;
}
public function result() {
	$query = "SELECT ".join(",",$this->selectables)."
		FROM {$this->table}";
	if (!empty($this->whereClause))
	$query .= " WHERE {$this->whereClause}";
	if (!empty($this->limit))
	$query .= " LIMIT {$this->limit}";
	return $query;
  }
} 

$db= new DBManager();
$db->select("id","name")->from("users")->where("id=1")
->limit(1)->result();