Быстрый набор для ремонта баз
Friday, October 30th, 2009Движение 1: проверяем на битые таблици
mysqlcheck -p -uuser dbname
Движение 2: ремонтируем их
repair table table_name
Движение 1: проверяем на битые таблици
mysqlcheck -p -uuser dbname
Движение 2: ремонтируем их
repair table table_name
created = поле с unix timestamp
SELECT count(nid), FROM_UNIXTIME(n.created, ‘%Y %d %m’) as created_day FROM node n group by created_day
select mail from users where status=1 and
unix_timestamp(date_sub(now(), interval 24 hour)) <= created
один из способов проверить еслть ли запись в 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
|
В таблице есть поле 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 )
UPDATE ml SET cron = (SELECT if(cron = 0,”1″,”0″)) WHERE yid = %d
Предположим у вас в колонке данные с разным регистром
Коля вася Игорь
И предположим вам нужно найти васю, но вам неизвестно в каком регистре используется его имя, для этого воспользуемся функцией LOWER()
SELECT lower(t.name) FROM term_data t WHERE lower(t.name) = lower(’Вася’)
при таком запросе и не только поиск но и вывод будет в нижнем регистре
так же и работает и UPPER()
Для того что бы проверить null значение поля не стоит использовать рыбку (<>) для этого есть встроенные
IS NULL
IS NOT NULL;
SELECT ru FROM dict2 d where length(ru) = 135
В этом запросе будут показывать строки где в длина не первышает 135 символов
Ниже приведенный класс позволяет унифицировать составление запросов. Удобно тем, что попутно в каждый метод класса можно добавлять проверки и прочее необходимое
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();