Допустим есть таблица, с значениями
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `path` (`path`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `test` (`id`, `path`) VALUES
(1, 'mypath'),
(2, 'mypath2'),
(3, 'mypath3'),
(4, 'youpath1'),
(5, 'youpath2');
Необходимо построить запрос, для генерации первого свободного элемента. Желательно без хранимых процедур.
В конкретном случае для
WHERE `path` LIKE 'mypath%'
Должно вернуть
mypath1 для первой итерации и
mypath4 для второй,
и соответсвенно
youpath для первой итерациии и
youpath3 для второй, по маске
WHERE `path` LIKE 'youpath%'
На РНР можно было так сделать. Но не хотелось тащить на сервер весь список, перебирать его, а сделать это на стороне БД
$suffix = '';
$init = 1;
$pattern = 'mypath';
$paths = array(
'mypath',
'mypath2',
'mypath3',
);
while (array_key_exists($pattern . $suffix, $paths)) {
$suffix = $init++;
}
return $pattern . $suffix;