Удаление строк MySQL

levi-de

Новичок
Удаление строк MySQL

Здрасте!

Есть у меня массив данних $spreis[]

Задача удалить из бази данних все строчки, которие с ним не совпадают.

Например:
массив $spreis[] = Olja, Sveta
в басе: Olja, Sveta, Marina

Нужно удалить Марину


Код:


foreach($spreis as $preis)
{
$sql2="select * from angebote where name != '$preis'";
$result2=mysql_query($sql2);
$rows2=mysql_num_rows($result2);
for($i2=0;$i2<$rows2;$i2++)
{
mysql_data_seek($result2,$i2);
$arr_del2=mysql_fetch_array($result2);
mysql_query("delete from angebote where code = '$arr_del2[name]'");
}
}

Ни фига не работает :_-(
 

Фанат

oncle terrible
Команда форума
дикари, которые берутся писать программы, но при этом даже не слышали о понятии отладки.

как у тебя должен выглядеть запрос
delete from angebote where code = '$arr_del2[name]'"?
а как он выглядит на самом деле?
ты не смотрел? А почему?
 

levi-de

Новичок
Да, согласен, получается ерунда.
Но почему в таком случае, когда в первоначальном запросе я меняю "не равно" на "равно" - то всё работает. Принцип ведь один и тот же, или?
 

Фанат

oncle terrible
Команда форума
боже мой.
Я НЕ ПИСАЛ, что получается ерунда.
я НЕ ЗНАЮ, а - главное - НЕ МОГУ знать, ерунда там получается, или нет.
я ВСЕГО ЛИШЬ СПРОСИЛ, как выглядит запрос, который уходит в базу.
причём ответ на этот вопрос нужен, опять же, не мне, а тебе.

я не говорил, что ерунда.
я всего лишь спросил - ты ВИДЕЛ запрос, который отправляешь в базу?
как он выглядит? исполняется ли самостоятельно, вне скрипта?
какие ошибки выдаёт?
 

levi-de

Новичок
Ошибок он никаких не видаёт просто вместо того, чтоби получить "Марину" получаю
"МаринаСветаМаринаСветаОляМаринаОляСвета и.т.д.

В логике ошибок не вижу
 

chisto_tolyan

Враг народа
у тебя массив прям так и выглядит - $spreis[] = Olja, Sveta?
или все же
$spreis[] = 'Olja';
$spreis[] = 'Sveta';
по логике, тут можно и одним запросом обойтись
 

levi-de

Новичок
Ну, вообще, у меня там не Оля со Светой, ето я так для наглядности. Там, короче, таблица есть, которая состоит из строк бази. В зависимости от того, сколько строк, столько и значений пробретёт массив.

я его передаю с <hidden name="$spreis[]">

A kak obojtis' odnim zaprosom?
 

chisto_tolyan

Враг народа
есть массив, для наглядности:
$mass[0]='var1';
$mass[1]='var2';
Нужно удалить из БД все записи, где name!=значению в массиве?
PHP:
$query = "DELETE FROM tbl_name WHERE name NOT IN('".implode("','",$mass)."')";
 

tf

крылья рулят
chisto_tolyan поосторожней онже так и сделает
ps. так лучше
 

chisto_tolyan

Враг народа
Есть у меня массив данних $spreis[]
Задача удалить из бази данних все строчки, которие с ним не совпадают.
насколько я догадываюс, это ему и нужно
2 tf
p.s. с кавчками натупил)
 

levi-de

Новичок
Ne, nu tovarischi - eto ne delo. U menja barana takogo, opjat' ne rabotaet.

Vot napisal:

$los = implode(",", $spreis);
mysql_query("delete from angebote where code not in ('.$los.')");

Pischet sintaksicheskuju oschibku na stroke xxx
 

Фанат

oncle terrible
Команда форума
я считаю, что такими заплатками помочь человеку, который не понимает, что делает его код - невозможно.

вы суёте ему кусок кода, а он даже не понимает, что он делает.
он не знает, что хочет получить.
он не может даже отладить, поскольку не знает, что делает его собственный скрипт.

он ДАЖЕ СТРОКУ УКАЗАТЬ, в которой у него ошибка - НЕ В СОСТОЯНИИ.
 

levi-de

Новичок
Фанат
S chego ti vzjal, chto ja ne ponimaju, chto ja delaju?

implode objedenjaet elementi v stroku
vivoju na pechat $los - poluchaju stroku iz elementov massiva

Vsjo ja prekrasno znaju, chego ja hochu. Esli bi ti men'sche samovirajat'sja, a vnimatel'nee prochital to, chto ja pisal v zadache, ti bi ne utverjdal obratnoe.

Esli tebe stanet namnogo legche ja exkljusivno dlja tebja napischu, chto oschibka u menja na stroke NR. 317

ja ne znaju prosto, kak pravil'no napisat' konstrukciju s NOT IN(...) - ni razu ne pol'zovalsja.

$los = implode(",", $spreis);
mysql_query("delete from angebote where code not in ('.$los.')");

tak chto tut ne pravil'no?
 

chisto_tolyan

Враг народа
http://phpfaq.ru/debug
по поводу того что делает его код - да))
Если передавать в хидене значения, так как делает автор, и делать с ними то, что он хочет, то любой нехороший дядя сможет запросто очистить ему всю таблицу...для начала)
намек автору пересмотреть архитектуру своего приложения8)
по поводу NOT IN:
NOT IN('value1','value2') - для строк
NOT IN(0,1,2) - для чисел
что у тебя неправильно, догадываюс что кавычки, а вообще текст ошибки в студию)
 

levi-de

Новичок
Metodom nauchnogo tika vsjo zarabotalo
Vot kod

mysql_query("DELETE FROM angebote WHERE code NOT IN('".implode("','",$spreis)."')");

chisto_tolyan
spasibo
 

Фанат

oncle terrible
Команда форума
levi-de
спасибо не булькает.
я думаю, будет вполне справедливо, если ты поделишься с Толяном гонораром за работу, которую он тебе спас. Ведь без его помощи ты бы не получил вообще ничего.
 

chisto_tolyan

Враг народа
Фанат
поддерживаю)хотя я сомневаюсь, что это платный заказ.
levi-de
так ведь?)
 

levi-de

Новичок
je nepremenno tak i sdelaju, esli professor mne hot' chto-nibud' zaplatit. Mogu razve, chto ocenkoj podelitsja. Hochesh, i s toboj podeljus'? Mojet ti takim zlim ne budesh...
 
Сверху