Может ли операция UPDATE изменять строки?

hussar

In code we trust!
Может ли операция UPDATE изменять строки?

Я делаю удаление повторяющихся значений из базы. И столкнулся со следующей проблемой.

У меня на странице при каждом событии POST все данные из базы обновляются (делаю UPDATE). Затем я пытаюсь удалить повторы, но удаляются не все. Если отключить UPDATE на странице, то все повторы замечательно удаляются. Данные на странице выводятся в textarea и во время POST уже никак не обрабатываются.

Может ли быть такое что при UPDATE у меня изменяются строки
 

Кром

Новичок
>Может ли быть такое что при UPDATE у меня изменяются строки

Как это и не покажется тебе странным, UPDATE для того и существует, что бы изменять данные.
 

hussar

In code we trust!
Нет я не в этом смысле :)
Данные не меняются. У меня просто так страница устроена, что на случай того если поменялись данные на ней, все записи прогоняются через UPDATE. Но я ничего не меняю для проверки удаления совпадающих значений. Однако удаляются не все совпадения.
 

Кром

Новичок
hussar, пока тебя понять невозможно. Расскажи про то, что нужно сделать, а не про то решение, которое ты для этого выбрал.
 

hussar

In code we trust!
ок.
У меня из базы выводятся записи.
Эти записи выводятся в textarea, чтобы пользователь если надо их изменял, но пользователь их может и не менять.
Для того чтобы изменения не пропали, если что-то поменялось, я при каждом вызове пост загоняю все данные в таблицу (UPDATE).

Так же у меня на странице есть пнопка удалить повторы. Вот тут самое интересное...

Повторы удаляются но не все, допустим из 202 записей получается 119, а не 101 как должно быть. Но если я не делаю перед этим UPDATE таблицы, то при сносе повторов получаю правильные 101 запись без повторов.

Таким образом я предположил что при UPDATE что-то происходит с данными, и они становятся не идентичными.

В коде -
У меня сначала происходит UPDATE, а потом выбор повторов.
 

Кром

Новичок
1. Что в твоем понимании повторы?
2. По какому принципу ты определяешь записи для обновления?
 

IntenT

SkyDiver
ну откуда мы можем знать как ты эти повторы определяешь????
 

hussar

In code we trust!
1. Повторы это полное совпадение содержания 4 полей, т.е. если есть две записи в БД которые совпадают по 4 определенным полям - это повтор.

2. Я не определяю записи для обновления, у меня все записи обновляются в любом случае были ли они изменены или нет.
 

Screjet

Новичок
!) Вначале все в группе записей грохай (DELETE)
") Потом вставляй все заново (INSERT)
 

Кром

Новичок
3. А почему эти повторы создаются? Т.е. зачем вносить одинаковые данные?
 

hussar

In code we trust!
IntenT
повторы вот так определяю и вычищаю, но здесь вопрос не в этом, скрипт работает правильно если перед ним не произошел UPDATE данных таблицы
PHP:
$r=mysql_query("SELECT * FROM temp WHERE flag='$_SESSION[flag]' AND del<>'1'");
	while($t=mysql_fetch_array($r)) {
		if (!isset($arr) || !in_array($t['id'], $arr))
		{
			$q=$t['q'];
			$a1=$t['a1'];
			$a2=$t['a2'];
			$a3=$t['a3'];
			$a3=$t['a3'];
			$a4=$t['a4'];
			$id=$t['id'];
			$res=mysql_query("SELECT * FROM temp WHERE q='$q' AND a1='$a1' AND a2='$a2' AND a3='$a3' AND a4='$a4' AND id<>'$id'");
			while($tmp=mysql_fetch_array($res))
			{
				$arr[]=$tmp['id'];	
			}
		}
	}
	if (isset($arr)){
		foreach($arr as $v)
		{
			mysql_query("DELETE FROM temp WHERE id='$v'");	
		}
		header("Location: ".$_SERVER['PHP_SELF']);
		exit;	
	}
-~{}~ 14.10.04 17:48:

Фанат
У меня в таблице таких полей нет

Кром
Повторы могут создаваться по причине того что поступают в базу из разных мест и пользователи могут добавлять одинаковые данные и плодить повторы.

Screjet
А будет ли это хорошо с точки зрения производительности?

И всетаки интересно узнать что такое делает UPDATE, что так получается.
 

Фанат

oncle terrible
Команда форума
ок, не угадал.
Я не пойму твоей проблемы.
Тебе не нравится, что апдейт изменяет строки и они перестают быть идентичными?
или тебе кажется, что они идентичны, но поиск повторов их не удаляет? Ну так запроси их и выведи через var_dump и глазами смотри свои повторы.
Делов на 5 минут.
Если знаешь чего хочешь.
А если не знаешь, то на форуме тем более не надо сопли жевать
 

hussar

In code we trust!
Да мне не нравиться что UPDATE меняет строки. Я точно знаю что до UPDATE они абсолютно одинаковые. И если его не делать, то все повторы удаляться. А мне надо добиться чтобы ВСЕ повторы удалялись когда я делаю перед этим UPDATE.
 

Cougar

Кошак
Может, покажешь SQL-запрос? Тот самый, который меняет. И заодно блок кода, в котором он используется...
 

Фанат

oncle terrible
Команда форума
Да мне не нравиться что UPDATE меняет строки
не нравится - найди, что она изменяет, и исправь СВОЙ код.
ЕЩЕ ВОПРОСЫ ЕСТЬ?

-~{}~ 14.10.04 18:12:

Cougar
а ты, типа, вперя свой могузий взор в его код сразу угадаешь, в чем проблема?
может быть, тебе гадательный салон открыть?
Тебе известно, что программисты не гадают, а ОТЛАЖИВАЮТ свои программы?
 

hussar

In code we trust!
Cougar
Вот код
PHP:
$q=$_POST['q'][$i][0]; 	
$a1=$_POST['a1'][$i][0]; 	
$a2=$_POST['a2'][$i][0];	
$a3=$_POST['a3'][$i][0];	
$a4=$_POST['a4'][$i][0]; 	
$categ=$_POST['categ'][$i][0];	
$reit=$_POST['reit'][$i][0]; 
$id=$_POST['id'][$i][0]; 
mysql_query("UPDATE temp SET q='$q', a1='$a1', a2='$a2', a3='$a3', a4='$a4', reit='$reit', categ='$categ' WHERE id='$id'");
Фанат

Я не могу найти, поэтому и спросил на форуме, может уже у кого-то была такая проблема.
 

Фанат

oncle terrible
Команда форума
Я не могу найти
Я тебе сказал, КАК найти.
Почему ты до сих пор здесь, а не ушуршал искать?
может уже у кого-то была такая проблема
НЕТ НЕ БЫЛО.
потому, что это не проблема базы или пхп, а проблема исключительно твоего кривого кода.
А проблем с кодом, написанным твоими кривыми рукаими ни у кого, слава богу, не было, и, я надеюсь, никогда не будет.
 

Cougar

Кошак
Бр-р-р... полностью согласен с раздолбаем.

hussar
Ты не думал о том, чтобы перед UPDATE проверять уже имеющиеся в БД данные - дабы заранее обезопасить себя от повторов?
 
Сверху