Archief - MYSQL: update/insert

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Marbug

Legacy Member
is het mogelijk om e controleren bij ene update dat die het specifieke ding heeft geupdate?
als hij neit an updaten, dus als hij niks vind, met de WHERE dat die dan toevoegt:
PHP:
		if(!mysql_query("UPDATE hit_count SET count=count+1 WHERE link='".addslashes($link)."'")){
			mysql_query("INSERT INTO hit_count (link,count) VALUES ('".addslashes($link)."','1')");
		}
dus: Als hij niets vind om te updaten, dan moet hij false weergeven en ene insert doen, ik heb getest en het is niet mogelijk om dat volgns de bovenstaande code te doen. Andere mogelijkheid is om eerst een query te doen, om te zien of da veld bestaat, maar dan zit e met een extra query. Als het neit op ene andere mannier ga danmoet ik het zo wel doen ...

GenesisX

Legacy Member
als(select om te kijken of het veld bestaat) dan
.updaten
else
.insert
end

Zoiets?

Marbug

Legacy Member
GenesisX zei:
als(select om te kijken of het veld bestaat) dan
.updaten
else
.insert
end

Zoiets?
zo doe ik het momenteel ja
Radiance zei:
http://dev.mysql.com/doc/refman/4.1/en/replace.html
Als dat niet voldoet ga je iets alla stored procedures nodig hebben, da's nog heel experimenteel bij mijn weten, zal je MySQL 5.1 ofzo voor nodig hebben.

als het experimenteel is, dan wil ik het nog niet gebruiken,
en daarbij gebruikt de host waar ik op zit nog geen mysql 5.1
dus ik wacht wel :)
maar ik zal er is naar kijken

ik heb zojuist gekeken, en die replace kan ik niet gebruiken, want ik heb nog niets gezien dat hij een vorige waarde kan hergebruiken, zoals bij een update: count=count+1

Code:
Values for all columns are taken from the values specified in the REPLACE statement. Any missing columns are set to their default values, just as happens for INSERT. You cannot refer to values from the current row and use them in the new row. If you use an assignment such as SET col_name = col_name + 1, the reference to the column name on the right hand side is treated as DEFAULT(col_name), so the assignment is equivalent to SET col_name = DEFAULT(col_name) + 1.

dus dit zou moeten werken:
PHP:
mysql_query("REPLACE hit_count SET count=DEFAULT(count)+1,link='".addslashes($link)."'");

zou da zo werken? en link moet dan primary key, of unique zijn...

ik heb het geprobeerd en het werkt niet :(, hij voegd steeds een nieuwe row in en verwijderd de vorige met diezelfde link, count blijft altijd 1, en ja, link is unique...

Dx-Solutions

Legacy Member
simpele maar mss niet de beste manier:

select count(*) as counter from tbl where ... = ...

If (counter <> 0){
Update
}else{
Insert
}

zoiets, anders stored procedures if exists ... kan ook met sql server als je hosting dit heeft ...

greetz

swiFFer

Legacy Member
zoek info of voeg toe en bekijk wat dit geeft :
mysql_affected_rows();

denk dat je het daar wel mee doet ;)

edit : tip. als het 0 geeft doe je ma je insert eh :p

Obliv`

Legacy Member
Ik heb mysql alleen nog maar in combinatie met j2ee gebruikt.

Als je daar een insert/update/delete statement uitvoerde, kon je optioneel het aantal rijen dat werd aangepast opvangen.

Code:
public Integer updateHitCount(String link)
{
     Integer aantalAangepasteRijen = 0;
     PreparedStatement stmt = null;
     
     stmt = _cnn.prepareStatement("UPDATE hitCount SET count = count + 1 WHERE link = ?");
     stmt.setString(1, link)
     
     aantalAangepasteRijen = stmt.executeUpdate();
     
     stmt.close();
     stmt = null;

     return aantalAangepasteRijen;
}

Kweet niet of je hier iets mee bent en of het in php mogelijk is op een gelijkaardige manier.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan