Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте!
Есть таблица ticket:
id -> int(10) date_time -> datetime message -> text url -> varchar(255)
Есть задача: имея массив значений проверить есть ли такое значение в базе, если такого значения нет то присваиваем это значение переменной. Моя реализация данной задачи:
$link = array('http://www.ya.ru', 'http://www.google.ru', 'http://www.yahoo.com', 'http://www.rambler.ru'); //значений в реале намного больше foreach($link as $value){ if(!$db->query("SELECT * FROM ticket WHERE url='".$value."' LIMIT 1")){ $url = $value; break; } } if(!isset($url)) echo('Совпадений не найдено');
Данный пример работоспособный НО не очень эффективный, так как при большом объеме значение массива и слабом сервере постоянно выскакивает ошибка:
MySQL Error! ------------------------ The Error returned was: MySQL server has gone away Error Number: 2006 SELECT * FROM ticket WHERE url='http://www.site.ru' LIMIT 1
Подскажите возможно ли решить эту задачу одним запросом возможно условным каким нибудь, или же натолкните меня на более эффективный алгоритм.
Спасибо!
Отредактированно Xplod (14.09.2009 16:30:56)
Неактивен
1. А есть ли у вам индекс на url?
2. Зачем вам * в запросе? Вас не нужны данные. Напишите SELECT url FROM ... это позволит серверу не обращаться к файлу с данными, а читать только файл с индексом.
Неактивен
Страниц: 1