накатал тут функцию:
function rndTitle($model, $title, $i)
{
$i++;
$res = DB::query("SELECT COUNT(*) AS `cnt`
FROM `" . DBPREFIX . "videos`
WHERE `model_id` = " . $model . "
AND `title` = " . DB::quote($title) . "
");
if ($res->fetchColumn() == 0)
return $title;
else
{
$title = $title . '-' . $i;
rndTitle($model, $title, $i);
}
return $title;
}
но, что-то совсем не получается сделать ни чего :)), не понимаю как тут рекурсия отрабатывает, по моей логике - как в базе нету совпадений, сразу возвращаем новый $title, а до тех пор делаем рекурсию на себя (перебирая варианты), попробывал я отловить блок else, с выводом echo, вроде тут больше похоже на правду, но title естественно генерируется чудок не правильно, а так $title = $title . '-' . $i; т.е. получается audi-r8, audi-r8-1, audi-r8-1-2, audi-r8-1-2-3, ни как мне нужно..
помогите, что-то совсем с простой задачей справится не могу :)
Спустя 11 минут, 32 секунды (8.03.2012 - 11:49) cyberside написал(а):
Самый простой способ делать титл по id записи в БД...
Спустя 2 минуты, 55 секунд (8.03.2012 - 11:52) zeromind написал(а):
мне такой способ не подходит
Спустя 1 минута, 45 секунд (8.03.2012 - 11:54) cyberside написал(а):
Ну, а если к титлу в конец подставлять id записи?))
Спустя 3 минуты, 16 секунд (8.03.2012 - 11:57) zeromind написал(а):
а как узнать заранее id записи?) или делать 2 SQL запроса? ) хочется вообщем чтоб счетчик шел с единицы
Спустя 4 минуты, 37 секунд (8.03.2012 - 12:02) cyberside написал(а):
SELECT MAX(id) as `maxid` FROM `babyunia`
$myID = $result['maxid']+1;
Как-то так... Или же как ты сказал 2 SQL
Спустя 14 минут, 51 секунда (8.03.2012 - 12:17) zeromind написал(а):
это и будет 2 SQL запроса)) первый на выборку, второй на вставку..
вообщем мне нужно, как я описал
вообщем мне нужно, как я описал
Спустя 7 минут, 36 секунд (8.03.2012 - 12:24) sharki написал(а):
zeromind
Ну сохрани первоначальное имя в переменной перед функцией, а потом используй по назначению, подставляя циферки
Ну сохрани первоначальное имя в переменной перед функцией, а потом используй по назначению, подставляя циферки
Спустя 4 минуты, 27 секунд (8.03.2012 - 12:29) zeromind написал(а):
дело в том, что первоначальное имя $title парсится с всяких там youtube, vk и тд, название файлов может совпасть, я решил разумно будет после $title дописать цифру 1, если уже такое $title в БД есть, значит цифру 2 и тд.. вот алгоритм не могу правильно записать такой задачи((
Спустя 4 минуты, 16 секунд (8.03.2012 - 12:33) Visman написал(а):
zeromind, при использовании рекурсии ты согласен плодить запросы к базе?
function rndTitle($model, $title, $i)
{
$i++;
$res = DB::query("SELECT 1 AS `cnt`
FROM `" . DBPREFIX . "videos`
WHERE `model_id` = " . $model . "
AND `title` = " . DB::quote($title) . "
");
if ($res->fetchColumn() > 0)
{
$title = preg_replace('%\-\d+$%', '', $title) . '-' . $i;
rndTitle($model, $title, $i);
}
return $title;
}
Спустя 3 минуты, 58 секунд (8.03.2012 - 12:37) zeromind написал(а):
Цитата (Visman @ 8.03.2012 - 12:33) |
zeromind, при использовании рекурсии ты согласен плодить запросы к базе?function rndTitle($model, $title, $i) |
конечно, до тех пор, пока тайтл ни станит уникальным
Спустя 3 минуты, 31 секунда (8.03.2012 - 12:40) zeromind написал(а):
всё вроде бы хорошо, но результат совпадения последний не выводит, точнее функция вообще ни чего не выводит, а если после рекурсии пишу echo $title;
то вроде тут все циклы правильные, мне получается надо последний вариант ретюрнить ? ток как ))
хотя, я не прав, выводит первый результат рекурсии.. в БД такая запись уже есть , щяс буду пробыватье ещё)
то вроде тут все циклы правильные, мне получается надо последний вариант ретюрнить ? ток как ))
хотя, я не прав, выводит первый результат рекурсии.. в БД такая запись уже есть , щяс буду пробыватье ещё)
Спустя 4 минуты, 54 секунды (8.03.2012 - 12:45) Visman написал(а):
model_id и title строковые поля, значения в кавычки надо брать в запросе.
$res->fetchColumn() возвращает колонку, а надо проверять на наличие строк в ответе.
$res->fetchColumn() возвращает колонку, а надо проверять на наличие строк в ответе.
Спустя 47 секунд (8.03.2012 - 12:46) zeromind написал(а):
т.е. вот так:
показывает все циклы, вплоть до последнего валидного !
сама функция при такой записи не возвращает ни чего, хотя должен отработать блок
if ($res->fetchColumn() == 0)
return $title;
function rndTitle($model, $title, $i)
{
$i++;
$res = DB::query("SELECT 1 AS `cnt`
FROM `" . DBPREFIX . "videos`
WHERE `model_id` = " . $model . "
AND `title` = " . DB::quote($title) . "
");
if ($res->fetchColumn() == 0)
return $title;
else
{
$title = preg_replace('%\-\d+$%', '', $title) . '-' . $i;
rndTitle($model, $title, $i);
echo $title;
}
}
показывает все циклы, вплоть до последнего валидного !
сама функция при такой записи не возвращает ни чего, хотя должен отработать блок
if ($res->fetchColumn() == 0)
return $title;
Спустя 1 минута, 51 секунда (8.03.2012 - 12:48) zeromind написал(а):
model_id - (int), а title - я экранирую DB::quote - там они автоматом прописываются ''..
щяс попробую rowCount(), или что тут нужно ? )
щяс попробую rowCount(), или что тут нужно ? )
Спустя 3 минуты, 23 секунды (8.03.2012 - 12:51) Visman написал(а):
function rndTitle($model, $title, $i)
{
$i++;
$res = DB::query("SELECT 1 AS `cnt`
FROM `" . DBPREFIX . "videos`
WHERE `model_id` = " . $model . "
AND `title` = " . DB::quote($title) . "
");
if ($res->fetchColumn() > 0)
{
$title = preg_replace('%\-\d+$%', '', $title) . '-' . $i;
$title = rndTitle($model, $title, $i);
}
return $title;
}
Спустя 2 минуты, 32 секунды (8.03.2012 - 12:54) zeromind написал(а):
Цитата (Visman @ 8.03.2012 - 12:51) |
function rndTitle($model, $title, $i) |
is_valid = true;
+ в карму за помощь