Вот одна единственная таблица сайта.
id int insigned primary key auto_increment,
text text,
link char(8) UNIQUE
Как удобней и быстрей сгенерироать уникальную link?
Cначала задаем случайное значение буквенный rand (8,8), а потом надо проверять со всеми записями вдруг копия будет, а это глупое решение. Мне советовали auto_increment на поле link, но у меня буквенное значение и да и есть уже auto_increment в поле id и выдает ошибку.
Спустя 7 минут (3.10.2011 - 12:23) Winston написал(а):
Спустя 5 минут, 49 секунд (3.10.2011 - 12:29) m4a1fox написал(а):
maximka787
Если уникально! Я например так делаю!
Если уникально! Я например так делаю!
public $abc = 'abcdefghijklmnopqrstuvwxyzABSCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
public function RandomLink() {
$link = substr(str_shuffle($abc), 0, 8);
return $link;
}
Спустя 12 минут, 28 секунд (3.10.2011 - 12:41) Zerstoren написал(а):
А взять текст с заголовка страницы, сделать транслитерацию, после чего проверить в базе такой url и вставить?
Если данный url занят - то добавить в конец "-1"
И не генерируйте случайные ссылки.
Во первых - это не ЧПУ, а каша
А во вторых поисковые системы не оценят.
Возьмите логику:
1) Пользователь забил урл сам
2) Если нет, то транслитерировать заголовок страницы
3) Если заголовок не заполнен, то сделать поле require
4) На крайняк выдрать 2-3 слова с начала текста
Если данный url занят - то добавить в конец "-1"
И не генерируйте случайные ссылки.
Во первых - это не ЧПУ, а каша
А во вторых поисковые системы не оценят.
Возьмите логику:
1) Пользователь забил урл сам
2) Если нет, то транслитерировать заголовок страницы
3) Если заголовок не заполнен, то сделать поле require
4) На крайняк выдрать 2-3 слова с начала текста
Спустя 21 час, 42 минуты, 47 секунд (4.10.2011 - 10:24) maximka787 написал(а):
Спасибо, сама генерация URL это совсем не суть вопроса. Главное его уникальность.
А подскажите, мне на будущее, если вдруг решу плюсовать, то так верное решение?
А подскажите, мне на будущее, если вдруг решу плюсовать, то так верное решение?
$url = $_POST['url'];
function create_url($url){
$result = mysql_query("select * from `tab` where `url` = '$url'");
if(mysql_num_rows($result)>0)
{
$url = $url+1;
create_url($url);
}
else
{
return $url;
}
}
Спустя 1 час, 2 минуты, 29 секунд (4.10.2011 - 11:26) Zerstoren написал(а):
Все правильно, только замените
select *
на
select id
даб не выбирать кучу мусора с БД.
select *
на
select id
даб не выбирать кучу мусора с БД.
Спустя 24 минуты, 8 секунд (4.10.2011 - 11:50) Zerstoren написал(а):
А еще в конец SQL запроса можете добавить LIMIT 1
Еще быстрее будет, если будет дубль
Хотя чуть детальней поработайте с место где идет модификация ссылки на уникальность, мне кажется, может произойти рекурсия.
Но так должно заработать нормально
Еще быстрее будет, если будет дубль
Хотя чуть детальней поработайте с место где идет модификация ссылки на уникальность, мне кажется, может произойти рекурсия.
Но так должно заработать нормально
function create_url($url , $modificator = 0){
$result = mysql_query("select * from `tab` where `url` = '$url'");
if(mysql_num_rows($result)>0)
{
$url = $url . '-' . (++$modificator);
return create_url($url , $modificator);
}
else
{
return $url;
}
}
create_url('url' );
_____________
..Работает - не трогай!