Databases Category

about Databases

New features, useful hints etc

Routines/procedures: queries with conditions

Допустим у вас есть входящий параметр "ModerationStatus" который отвечает за фильтр результатов выборки. В зависимости от этого параметра вам нужно показывать или все строки из таблицы или только некоторые.
Вот пример того, как это можно сделать с наименьшими усилиями:

CREATE PROCEDURE `Photo_Get_List`(ModerationStatus tinyint(1))
BEGIN
SET @query = 'SELECT * FROM Photos';
IF ModerationStatus IS NOT NULL THEN
SET @query = CONCAT(@query, ' WHERE ModerationStatus = ', ModerationStatus);
END IF;
PREPARE statement FROM @query;
EXECUTE statement;
DEALLOCATE PREPARE statement;

MySQL: SQL Profiler

SQL Profiler встроен в сервер базы данных и может быть динамически включен/выключен при помощи любой утилиты MySQL. Чтобы начать анализ запросов просто выполните следующую команду:

set profiling=1;

MySQL: Group Concatenation

Одна из тех мелочей, которые не критичны в использовании, но довольно полезны: GROUP_CONCAT - функция, которая возвращает элементы строк как одну строку с разделителем (по-умолчанию - запятая). Например:

SELECT GROUP_CONCAT(ID), type FROM `User` GROUP BY type;

Результат выполнения будет примерно следующим:
1,2,4,12 | admin
3,5,6,7,8,9,10,11 | user

SELECT GROUP_CONCAT(DISTINCT County ORDER BY Country SEPARATOR '; '), type FROM `User` GROUP BY type;

Результат может быть примерно такой:
Ukraine; Russia; USA | admin
Russia; Canada; USA | user

Syndicate content
© 2008-2009. Konstantin Artemov