[Pg/My] SQL сниппеты
Категория:
/ Mine блог
/ PHP (LAMP)
Postgresql
Замена в тексте
UPDATE authors SET city = REPLACE(city, 'Salt', 'Olympic');
UPDATE documents SET body = REPLACE(body, '542-1177', '(495) 542-4977') WHERE title LIKE 'example%';Случайное число
rand() AS random
ORDER BY randomРабота с датами
SELECT date_part('epoch',now()) AS unixtime;
SELECT extract('epoch' FROM now()) AS unixtime;
SELECT '2001-01-01'::timestamp + '1 year'::interval;
--where date is unixtime
WHERE date >= date_part('epoch', (to_timestamp('" . date('d.m.Y') . " 19:00', 'DD.MM.YYYY HH:MI') - '1 day'::interval))
SELECT to_timestamp('2002.11.03 04:16:00', 'YYYY.MM.DD HH24:MI:SS');
SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); --Result: 16
SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); -- Result: 4
Limit
LIMIT $limit OFFSET $offset
На закуску
Имеется база данных:
CREATE TABLE authors
(
id serial NOT NULL,
name varchar(64) NOT NULL,
CONSTRAINT "pk authors" PRIMARY KEY (id)
);
CREATE TABLE books
(
id serial NOT NULL,
author_id int NOT NULL,
name varchar(255) NOT NULL,
published timestamp without time zone NULL, - если NULL, то книга еще не издана.
CONSTRAINT "pk books" PRIMARY KEY (id),
CONSTRAINT "fk books/authors"
FOREIGN KEY (author_id)
REFERENCES authors (id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE UNIQUE INDEX "ix books" ON books (author_id, published);
+--------------------------------------------------------------------- ----------+
Надо вывести: | имя автора | название последней изданной книги | дата издания последней книги |
+--------------------------------------------------------------------- ----------+
То есть, написать запрос, который выводит всех авторов, у которых ИЗДАНО более двух книг и показать
последнюю изданную книгу каждого автора и дату ее издания.
Предполагается, что таблицы огромные, поэтому запрос ДОЛЖЕН быть максимально экономичным.
SELECT a.name, b.name, b.published
FROM books b
INNER JOIN
(
SELECT author_id, MAX(published) AS published
FROM books
WHERE published IS NOT NULL
GROUP BY author_id
HAVING COUNT(id) > 2
) AS x
ON x.author_id = b.author_id
AND x.published = b.published
INNER JOIN
authors a
ON a.id = x.author_id;Mysql
Запрос тестирования производительности системы. Может использоваться для доса при недостаточной фильтрации входящих данных скриптом.
SELECT BENCHMARK(500000, MD5(rand()))
@author: surg30n
@date: Вторник, 23 Декабрь 2008
@date: Вторник, 23 Декабрь 2008
загрузка...
