[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка в цикле
maximka787
Мужики, если кто разберется, помогите оптимизировать код.
Надо сделать проверку url на наличие копий и добавить + 1 в конец если копия есть, но дело в том, что не могу рекурсивно никак сообразить.
$url =  $_POST['url']; // получаем url
$result = mysql_query("select * from `product` where `url` = '$url'");

// если такой уже существует, то добавляем произвольное число в конец.
if(mysql_num_rows($result)>0){
$url = $url.rand(0,1000000); // заменить на +1
}
Мой код работает, но если совпадет и второй раз url? тут надо цикл наверно, чтоб делал пока не будет копий. Я ничего, кроме как прогнать проверку по второму разу (путем копирования второй раз кода) не могу.



Спустя 56 минут, 4 секунды (14.09.2011 - 10:31) vital написал(а):
$result =mysql_result(mysql_query('select count(url) from `product` where `url` = '.$url
),0);
$url=$url.$result;

Спустя 12 минут, 44 секунды (14.09.2011 - 10:44) maximka787 написал(а):
vital
круто и жестоко, а что тут написано-то?)))
это в mysql такая готовая конструкция есть?

Спустя 15 минут, 33 секунды (14.09.2011 - 10:59) ApuktaChehov написал(а):
Вообще, было бы проще всего, сделать по другому. К тому же в вашем алгоритме есть большая проблема. Сколько раз, при каждой работе скрипта будет проходить проверка, пока не найдется уникальное число? В начале может и не много, а потом? Когда таблица с УРЛ разрастется?

Предлагаю вот что. У вас есть таблица с урлами. Каждый новый урл вы записываете в нее. При этом в одну ячейку задайте как уникальную и сделайте ей автоинкремент, т.е. что бы автоматом число заносилось туда.

Получается, скрипт ищет в таблице нужный урл, если не находит, записывается новый урл и возвращает id записи, которая уникальна. Вы берете этот id и делаете что хотите с ним. А если скрипт найдет запить в БД по переданному урл, то уже будет делать что-то еще.

Спустя 4 минуты, 43 секунды (14.09.2011 - 11:04) maximka787 написал(а):
ApuktaChehov
поглядим)

Спустя 1 час, 30 минут, 30 секунд (14.09.2011 - 12:35) m4a1fox написал(а):
ApuktaChehov
Логично

Спустя 15 минут, 5 секунд (14.09.2011 - 12:50) maximka787 написал(а):
Ну я попробовал. Идея - то понятна, но не все просто.
Результат:

1. Уникальное значение нет смысла делать, тк оно просто не пропускает данные в БД, это только на случай безопасности. а нам надо чтобы пропустило причем в правильном виде.

2. auto_increment не делается на поле url, наверно из-за того, что ключ id auto_increment. (url это один столбец из многих в таблице с товарами)

Спустя 8 минут, 37 секунд (14.09.2011 - 12:58) Winston написал(а):
Цитата (ApuktaChehov @ 14.09.2011 - 10:59)
Получается, скрипт ищет в таблице нужный урл, если не находит, записывается новый урл

Даже без проверки достаточно просто написать
INSERT IGNORE INTO `table` (`url`) VALUES ('" . $url . "');

Спустя 27 секунд (14.09.2011 - 12:59) vital написал(а):
Цитата (maximka787 @ 14.09.2011 - 08:04)
ApuktaChehov
поглядим)

А еще почитайте про первую\вторую\третью нормальные формы.

Спустя 15 минут, 20 секунд (14.09.2011 - 13:14) ApuktaChehov написал(а):
maximka787 - я не говорил что ячейку урл, нужно сделать уникальной. Нужно сделать отдельную ячейку уникальной и с автоинкрементом. Иначе как вы в пхп, не зная что в мускуле, сформируете уникальное число? Да, генерацией случайных чисел и проверкой их в мускуле - что очень нехорошо.

Спустя 15 минут, 14 секунд (14.09.2011 - 13:29) maximka787 написал(а):
ApuktaChehov
Как все сложно, думал тут вопрос не встанет вообще.
То есть надо:
создать таблицу url varchar(255) key autoincrement
и работать путем проверок через эту таблицу?

Спустя 1 минута, 26 секунд (14.09.2011 - 13:31) ApuktaChehov написал(а):
maximka787 - у вас сейчас есть таблица с урл?

Спустя 11 минут, 25 секунд (14.09.2011 - 13:42) maximka787 написал(а):
ApuktaChehov
ну пока нет, сейчас есть
id_tovar, name, title, url

Спустя 4 минуты, 14 секунд (14.09.2011 - 13:46) ApuktaChehov написал(а):
Если не подойдет использовать эту таблицу, с товарами, то создайте новую.
Честно говоря, подойдет ли эта или нет, сказать не могу, так как не знаю зачем вы вообще все это делаете и как у вас все работает.


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.