[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка занятости значения
darkcuba
Всем доброго дня, представим, в базе данных в поле `url` имеются следущие данные:
1. naushniki_beats
2. naushniki_beats1

Необходимо сделать так, что бы следующая записываемая запись проверялась на занятость, если оно занято, добавить значение инкремента $i++ до тех пор пока данный урл не будет свободен. На скорую руку написал скрипт, оказалось, что в нем имеются ошибки.



# допустим
$url = $_POST['url'];

# проверяем наличие
## урл найден

if (mysql_result (mysql_query("SELECT COUNT(*) FROM `products` WHERE `url` = '".$url."' "), 0) > 0) {
# code...
while ( true ) {
# code...
$i++;
$url = $url.$i;
# урл свободен
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `products`
WHERE `url` = '"
.$url."' "), 0) == 0) {
break;
$url = $url;
}
}
}


INSERT INTO `url` -> $url.

Записывает данные поверх предыдущей записи. То есть:
1. naushniki_beats
2. naushniki_beats1
3. naushniki_beats12
4. naushniki_beats123

Прошу помочь, Заранее большое спасибо
sergeiss
Ну дык... Что написал, то и получил smile.gif

А что хотел получить, что значит фраза
Цитата (darkcuba @ 23.07.2014 - 12:45)
что бы следующая записываемая запись проверялась на занятость


Следующая - это какая, вот в такой последовательности?

1. naushniki_beats
2. naushniki_beats1
3. naushniki_beats2
4. naushniki_beats3

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
darkcuba
Цитата (sergeiss @ 23.07.2014 - 09:04)
Ну дык... Что написал, то и получил smile.gif

А что хотел получить, что значит фраза
Цитата (darkcuba @ 23.07.2014 - 12:45)
что бы следующая записываемая запись проверялась на занятость



Первая, то есть $url = $_POST['url'];
Допустим есть в базе значение N
Надо посмотреть есть ли там N1
если N1 существует проверяем N2 ит.д до момента пока это значение $url = $_POST['url'] не освободится.
kaww
1. проверять существование записи в базе лучше запросом вида SELECT 1 as hasExist FROM `products` WHERE `url` = '$url' limit 1; т.к. в этом случае если запись с уже есть, то mysql не будет просматривать таблицу до конца.
2. Задача легко решается без запросов в цикле:

$sql = mysql_query("select substring(url, length('$url') + 1) as i  from products where url REGEXP '^{$url}[0-9]+' order by i desc limit 1;");
$row = mysql_fetch_assoc($sql);
//если запрос что-то вернул, то:
$url .= ($row['i'] + 1);
//иначе
$url .= '1';
echo $url;
Valick
darkcuba, так нельзя делать, надо использовать штатную функцию автоинкремента СУРБД


_____________
Стимулятор ~yoomoney - 41001303250491
darkcuba
Цитата (kaww @ 23.07.2014 - 09:17)
1. проверять существование записи в базе лучше запросом вида SELECT 1 as hasExist FROM `products` WHERE `url` = '$url' limit 1; т.к. в этом случае если запись с уже есть, то mysql не будет просматривать таблицу до конца.
2. Задача легко решается без запросов в цикле:

$sql = mysql_query("select substring(url, length('$url') + 1) as i  from products where url REGEXP '^{$url}[0-9]+' order by i desc limit 1;");
$row = mysql_fetch_assoc($sql);
//если запрос что-то вернул, то:
$url .= ($row['i'] + 1);
//иначе
$url .= '1';
echo $url;

Спасибо за решение, не знал
Быстрый ответ:

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