Скрипт для исключения повторяющихся значений

Программирование, которое не связано с API.
Ответить
Аватара пользователя
Cadmy
Сообщения: 35
Зарегистрирован: 29 авг 2010, 21:12

Скрипт для исключения повторяющихся значений

Сообщение Cadmy »

Пишу php скрипт, который в случае если подобная запись уже есть в базе данных не записывает снова. Сначала запрос к базе возвращающий 1 при наличии такой же записи. Затем если значение запроса не равно 1, тогда делаю запись. При помощи echo вывожу одно из записываемых значений. Однако, возвращаемый результат представляет собой ошибку следующего вида

Код: Выделить всё

<br /><b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/home/h19159/data/www/aaa.ru/l.php</b> on line <b>36</b><br />1111
И данные, все равно, записываются в базу. Предполагаю, что ошибка в сравнение значения запроса и единицы. Поставил (int), но ен помогло. Помогите корректо составить сравнение.
Вот код:

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";       // обычно не нужно изменять$db_user="****";        // имя пользователя БД$db_password="****";        // пароль БД$db_name = "****";      // имя БД$table_name = "m";      // имя таблицы статистики. Если вы не меняли его в запросе, создающем БД, то и здесь менять его не надо// данные приложения$app_id = '****'; // id приложения$api_secret = '****'; // защищенный ключ приложения  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];$like_id = $_POST['like_id'];     // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'select max(1) as "ex"              from '.$table_name.'`              where EXISTS (                        SELECT *                        FROM `'.$table_name.'`                        WHERE `id` ='.$viewer_id.'                        and `like` ='.$like_id.'                    )';    $sql = @mysql_query($query);    $res=mysql_fetch_array($sql);     if ((int)$res[ex]!=1) {        $query = 'INSERT INTO `'.$table_name.'` (`id`, `like`) VALUES ("'.$viewer_id.'","'.$like_id.'")';        $sql = @mysql_query($query);        echo $like_id;    }   ?>
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт для исключения повторяющихся значений

Сообщение Александр »

UNIQUE KEY не подходит?
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Скрипт для исключения повторяющихся значений

Сообщение bodnar »

Cadmy писал(а):Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение
insert ... on duplicate key update ...
Аватара пользователя
Cadmy
Сообщения: 35
Зарегистрирован: 29 авг 2010, 21:12

Re: Скрипт для исключения повторяющихся значений

Сообщение Cadmy »

bodnar писал(а):
Cadmy писал(а):Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение
insert ... on duplicate key update ...
А duplicate key разве будет проверять оба записываемых значений или только ключевое поле?
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Скрипт для исключения повторяющихся значений

Сообщение bodnar »

on duplicate key update
он проверит ключевое поле, если такого нет создаст новую запись, если есть обновит существующую

з.ы. ключ может быть и составным, но это не тру
Аватара пользователя
Cadmy
Сообщения: 35
Зарегистрирован: 29 авг 2010, 21:12

Re: Скрипт для исключения повторяющихся значений

Сообщение Cadmy »

Спасибо, теперь все кашерно
Ответить