Прошу помощи в удалении сток

Статус
В этой теме нельзя размещать новые ответы.

linpc

Гуру форума
Регистрация
6 Апр 2012
Сообщения
178
Реакции
55
PHP:
$Buy = mysql_fetch_assoc($db->sql("SELECT * FROM `items` WHERE `count` > '0' AND `market` = '".$pers->pers['loc']."' AND `id` = '".intval($http->get['id'])."'"));
                $count = mysql_num_rows($db->sql("SELECT * FROM `invent` WHERE `protype`='1587' and `pl_id`=".$pers->pers['id']));
        if(!empty($Buy)){
            $ShowResult = 'Buy';
                if($count>=$Buy['price']){
                    $prarams = explode("|",$Buy['param']);
                    foreach ($prarams as $value) {
                        $stat=explode("@",$value);
                        switch($stat[0]){
                            case'2':
                                $dolg=$stat[1];
                            break;
                        }
                    }
                    $db->sql("INSERT INTO `invent` (`ItemName`,`img`,`protype`,`pl_id`,`dolg`,`price`,`dprice`,`i_param`,`i_need`,`koeff_art`) VALUES ('".$Buy['name']."','".$Buy['gif']."','".$Buy['id']."','".$pers->pers['id']."','".$dolg."','".$Buy['price']."','".$Buy['dprice']."','".$Buy['param']."','".$Buy['need']."','".$Buy['koeff']."');");
                    $db->sql("UPDATE `items` SET `count` = count-1 WHERE `id` = '".$Buy['id']."'");
                    //тут код удаления
                    $ShowResult .= '@Вы успешно купили "'.$Buy['name'].'" за '.$Buy['price'].' сердец@'.preg_replace('/[^w0-9]/','',$http->get['type']);
                }else{
                    $ShowResult .= '@Нехватает сердец!@'.preg_replace('/[^w0-9]/','',$http->get['type']);
                }
        }
Делая покупку вещи, мне надо чтоб удалялось n-количество сердец из БД,
Решил так:
for($i=1; $i<=$count; $i++){
$db->sql("DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT 1;");
}

Но это не правильно мне кажется. и удаляются все записи. так же у каждого вида сердец есть id_item различный
 
Как-то не особо ясно описана задача.

Если вам нужно удалить N записей из таблицы `invent` у которых поля `pl_id` и `protype` соответствуют нужным вам значениям, то это можно сделать путем изменения значения LIMIT:
DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT N;
 
Как-то неособо ясно описана задача.

Если вам нужно удалить N записей из таблицы `invent` у которых поля `pl_id` и `protype` соответствуют нужным вам значениям, то это можно сделать путем изменения значения LIMIT:
DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT N;
Я попробовал выставить, но он удалил все записи
 
Я попробовал выставить, но он удалил все записи

Запрос с "LIMIT N" удаляет строго N записей и не больше. Если такой запрос удалил все записи - значит записей было меньше, чем N.
 
Запрос с "LIMIT N" удаляет строго N записей и не больше. Если такой запрос удалил все записи - значит записей было меньше, чем N.
$db->sql("DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT ".$count.";");
Я выставил, но удалил он все, записей было 20
 
$db->sql("DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT ".$count.";");
Я выставил, но удалил он все, записей было 20

Значит значение переменной $count было 20 или больше.
Добавьте строку до или после запроса:
PHP:
echo "DELETE FROM `invent` WHERE `pl_id`='".$pers->pers['id']."' AND `protype`='1587' LIMIT ".$count.";";
И увидите какой именно запрос выполняется.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху