Ninazu
@Ninazu

Как сгенерировать следующий свободный элемент?

Допустим есть таблица, с значениями

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;
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы