Insert или Replace

sentenello

Registered
Здравейте,
Имам проверка която проверява дали съществува същия запис, и ако го има не предприема действие :D, което е ок.
Обаче ако го няма го INSERT. Проблема е че искам ако го няма да го записва, а ако го има но едното поле е различно, да Replace само него, а не да прави нов ред.

в случая бд ми има полета
id, zalogid,koef

а пхп кода ми е
Код:
function Verify($zalogID,$izborid,$izborkoef) 
                {        
                        $chek = mysql_query("SELECT * FROM `oddmove` WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}';")or die(mysql_error());        
                        return mysql_num_rows($chek)? 1 : 0; 
                }

//тук правя проверката и вкарвам инфото
if(Verify($zalogID,$izborid,$izborkoef) == 1) 
                {
				
                        echo "Има запис с такъв коеф";
                }else {
				$add5 = "INSERT INTO oddmove (id,zalogid,zalogime,koef,datazapis) VALUES ('$izborid', '$zalogID', '$izborime', '$izborkoef','$segashnadata')";
$query5 = mysql_query($add5);
		}
 
Иска ако имам вече това което вземам да не го вкарва в бд (това го има вече), и другото е ако го има но 1-то поле е различно ( в случая коеф) да го Replace.

Пример:
За вкарване:
Код:
id zalogid    koef
1      20       2.00
В БД
Код:
id zalogid    koef
1      20       2.30

В този случай искам да направи REPLACE, а в случай че в бд няма запис с такова ID,zalogid и koef, да го insert.
 
PHP:
function Verify($zalogID,$izborid,$izborkoef){       
    $chek = mysql_query("SELECT * FROM `oddmove` WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}';")or die(mysql_error());       
    return mysql_num_rows($chek)? 1 : 0;
}
function Update($zalogID,$izborid,$izborkoef){       
    mysql_query("UPDATE `oddmove` SET  `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}' WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}';")or die(mysql_error());       
}

//тук правя проверката и вкарвам инфото
if(Verify($zalogID,$izborid,$izborkoef) == 1){
	Update($zalogID,$izborid,$izborkoef);
    echo "Има запис с такъв коеф";
}
else{
    $add5 = "INSERT INTO oddmove (id,zalogid,zalogime,koef,datazapis) VALUES ('$izborid', '$zalogID', '$izborime', '$izborkoef','$segashnadata')";
	$query5 = mysql_query($add5);
}
 
@dakata
По-този начин няма ли да презапиша всички съществуващи вече записи, без значение дали само коеф е различен или са еднакви?

@djman
Това което ми даде, мисля че
Код:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE name=VALUES(name), age=VALUES(age)
ще ми свърши работа, само дето не знам как да задам, Ако другите са дупликейт, а коеф е различно да го презапише.

EDIT:
Ако не се лъжа, май се сетих. Няма ли да стане като променя завката на @dakata където е за Update
Код:
WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}';")
да стане
Код:
WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`!='{$izborkoef}';")
 
Ако не се лъжа фукнцията ми трябва да стане така.
Код:
function Verify($zalogID,$izborid,$izborkoef){       
    $chek = mysql_query("SELECT * FROM `oddmove` WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`!='{$izborkoef}';")or die(mysql_error());       
    return mysql_num_rows($chek)? 1 : 0;
}
а заявката

Код:
if(Verify($zalogID,$izborid,$izborkoef) == 1){
       $add6 = "REPLACE INTO oddmove ( `koef` )
SELECT koef FROM oddmove WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}'";
$query6 = mysql_query($add6);
    echo "Има запис с такъв коеф, презаписваме коефицента само.";
}
else{
    $add5 = "INSERT INTO oddmove (id,zalogid,zalogime,koef,datazapis) VALUES ('$izborid', '$zalogID', '$izborime', '$izborkoef','$segashnadata')";
        $query5 = mysql_query($add5);
echo"Няма такъв запис. Записваме всичко сега";
}

Нали ? :D
 
Кой от трите паръметъра желаеш да ъпдейтнеш от въведените? В момента с проверката тоест функцията проверяваш дали съществува запис ако не го създаваш. Щом имаш в тази функция проверки значи и трите неща фигурират там. Кое от трите искаш да ъпдейтнеш, коефициетга само ли?
 
Да, ако има вече запис с такова ид и залог ид, но коефициента се е променил, да ъпдейтна записа с вече новия коеф.
 
PHP:
function Verify($zalogID,$izborid,$izborkoef){       
    $chek = mysql_query("SELECT * FROM `oddmove` WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}' and `koef`='{$izborkoef}';")or die(mysql_error());       
    return mysql_num_rows($chek)? 1 : 0;
}
function Update($zalogID,$izborid,$izborkoef){       
    $chek = mysql_query("SELECT * FROM `oddmove` WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}';")or die(mysql_error());       
    $num = mysql_num_rows($chek)? 1 : 0;
	if($num == 1)
	{
		mysql_query("UPDATE `oddmove` SET `koef`='{$izborkoef}' WHERE `zalogid`='{$zalogID}' and `id`='{$izborid}';")or die(mysql_error());
		return true;
	}
	else 
	{
		return false;
	}
}

//тук правя проверката и вкарвам инфото
if(Verify($zalogID,$izborid,$izborkoef) == 1){
    echo "Има запис с такъв коеф";
}
else if(Update($zalogID,$izborid,$izborkoef))
{
	   echo "Ъпдейтнато е!";
}
else{
    $add5 = "INSERT INTO oddmove (id,zalogid,zalogime,koef,datazapis) VALUES ('$izborid', '$zalogID', '$izborime', '$izborkoef','$segashnadata')";
	$query5 = mysql_query($add5);
}
 
PHP:
    $add5 = "REPLACE INTO oddmove (id,zalogid,zalogime,koef,datazapis) VALUES ('$izborid', '$zalogID', '$izborime', '$izborkoef','$segashnadata')";
        $query5 = mysql_query($add5);
 

Back
Горе