Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Работа с UPDATE в MySQL


Автор: apostolnikolai 28.10.2012, 12:09
Всем привет! Подскажите в чем мой косяк! 

Код

// - эта часть работает нормально ( если в базе нет данных то производится запись данных )
    foreach ($ACTIVE_CONNECT as $x)
        {
mysql_query("INSERT INTO mt_ppp_active_connections SET active_connections_name='".$x["name"]."', active_connections_service='".$x["service"].
            "', active_connections_caller_id='".$x["caller-id"]."', active_connections_encoding='".$x["encoding"]."', active_connections_address='".$x["address"].
            "', active_connections_uptime='".$x["uptime"]."'");
            
        }
 
}
else
{

     
    foreach ($ACTIVE_CONNECT as $y)
    {
    
// тут нужно чтоб если данные есть обновить из ! и вот с этим косяк ! все строчки после обновления становятся последней записью из массива $y
    
mysql_query("UPDATE IGNORE mt_ppp_active_connections SET active_connections_name='".$y["name"]."', active_connections_service='".$y["service"].
            "', active_connections_caller_id='".$y["caller-id"]."', active_connections_encoding='".$y["encoding"]."', active_connections_address='".$y["address"].
            "', active_connections_uptime='".$y["uptime"]."'");

   }
 
    
}




Добавлено через 4 минуты и 6 секунд
Я понимаю что для корректного обновления мне нужно использовать where id= строки данных которую я собераюсь обновить, но как мне его получить и заставить работать в цикле!

Автор: bars80080 28.10.2012, 15:48
Цитата

все строчки после обновления становятся последней записью из массива $y
сами же знаете почему обновляются все - ведь не указаны условия WHERE. то есть любая запись


Цитата(apostolnikolai @  28.10.2012,  12:09 Найти цитируемый пост)
но как мне его получить

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

если обновить надо только те строки, в которых поле "а" имеет значение х, а поле "в" у, то так и писать:
 ... WHERE `a`="x" AND `b`=y

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

вот только само условие неизвестно

Автор: apostolnikolai 28.10.2012, 17:25
Спасибо !

Автор: Aliance 29.10.2012, 10:12
Может быть есть смысл просто использовать replace / insert on duplicate key update?

Автор: apostolnikolai 31.10.2012, 19:55
Подскажите еще одну вещь! 

Код

// запись данных в базу из $x
foreach ($ACTIVE_CONNECT as $x)
        {
mysql_query("INSERT INTO mt_ppp_active_connections SET active_connections_name='".$x["name"]."', active_connections_service='".$x["service"].
            "', active_connections_caller_id='".$x["caller-id"]."', active_connections_encoding='".$x["encoding"]."', active_connections_address='".$x["address"].
            "', active_connections_uptime='".$x["uptime"]."'");
            
        }


как удалить строку из базы если это строка не соответствует $x

Автор: bars80080 1.11.2012, 11:48
Код

$sql = 'DELETE FROM `table` WHERE `field`<>"'.$x.'"';

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)