Часто используемые запросы

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

При выводе скроет те строки которые в точности схожи:

SELECT DISTINCT * FROM nametable

Выведем поле odate с именем data и изменим формат отображения времени:

SELECT DATE_FORMAT( tn.odate, '%d.%m.%Y' ) AS data FROM tablename tn

Выборка из таблицы phpbb_users, где в одной из строк поля phpbb_users присутствует запись my-email@test.ru и/или есть no-my-email@test.ru, то есть проверка на существование:

SELECT * FROM phpbb_users WHERE user_email IN ('my-email@test.ru','no-my-email@test.ru');

Главный момент здесь - IN с помощью которого и происходит выборка значений, которые указаны в скобках через запятую.

Показать колонки(устанавливаемые правила) таблицы host:

DESCRIBE host

Добавим в таблицу forums новый столбец test, разместив его после столбца name:

ALTER TABLE forums ADD test int(10) AFTER name

Переименуем созданный столбец man в текстовый столбец women. При изменении только типа столбца, а не его имени происходит тоже самое:

ALTER TABLE forums CHANGE man women text

Удалим столбец test:

ALTER TABLE forums DROP test

Удалим из таблицы db стрку где в столбце User есть ячейка со словом ra:

DELETE FROM db WHERE User = 'ra'

Удаляем таблицу с именем tablename:

DROP TABLE tablename

Удаляем таблицу с именем dbname:

DROP DATABASE dbname

Обновляем в строке таблицы forums в поле name и поле hide где id этой строки = 2:

UPDATE forums SET name='PHP', hide=1 WHERE id=2

Замена чего-то во всех ячейках заданного столбца:

UPDATE ИМЯ_ТАБЛИЦЫ SET ИМЯ_ПОЛЯ=REPLACE(ИМЯ_ПОЛЯ, 'ЭТО ЗАМЕНИТЬ', 'НА ЭТО')

Для удаления одинаковых записей, можно применять такой запрос:

DELETE my_table
FROM my_table AS table1,
my_table AS table2
WHERE table1.my_field = table2.my_field AND table1.id > table2.id

Добавляем новую строчку:

SET @block_id := (SELECT id FROM menu WHERE title = 'Каталог' LIMIT 1);
INSERT INTO admin_menu VALUES ('Подменю', @block_id);
SET @id := LAST_INSERT_ID();
INSERT INTO permissions VALUES (1, @id);

Пронумеровать поле таблицы "по-порядку":

update my_table set
field1 =(select @a:= @a + 1 from (select @a:= 0) s)
order by field2, field3 ...

Создание функции:

CREATE FUNCTION sphinx_transliteration (doc TEXT) \
RETURNS TEXT DETERMINISTIC \
RETURN replace(replace(replace('ю','ju'),'я','ja'),'"',' ')
DROP FUNCTION IF EXISTS sphinx_transliteration

Поиск в временной таблице где строки объединены в одну строку с поомощью функции GROUP_CONCAT:

SET group_concat_max_len = 4294967295;
SELECT
    id,
    title
FROM Article
LEFT JOIN (
    SELECT
        articleId,
        GROUP_CONCAT(dataValue SEPARATOR ' ') as allRows
    FROM Paragraph
    WHERE isShow = 1
    GROUP BY articleId
) AS Paragraph ON Paragraph.articleId = Article.id
WHERE Article.isShow = 1 AND
    (
        Article.title LIKE :title OR
        Paragraph.allRows LIKE :text
    )
LIMIT 0, 10

Удачки!


09.07.2007 21:22