Het zit zo, ik heb een tabel genaamd KudoId en die is leeg zolang er nog geen kudo's zijn gegeven door de bezoekers.

Zodra een bezoeker de plus kudo kiest zou er een update moeten plaats vinden op de table, maar aangezien er nog geen waardes in deze tabel zitten kan er ook geen update plaats vinden.

Plus
<?php UPDATE KudoId SET waarde = waarde + 1, topic_id = 122, page = 'nieuws'; ?>

Min
<?php UPDATE KudoId SET waarde = waarde - 1, topic_id = 122, page = 'nieuws'; ?>

Zoland er wel al een waarde in deze tabel zit dan kan functineren de updates ook gewoon.

Ik begrijp dat er ergens een design fout zit, maar hoe zou ik dit kunnen corrigeren?

standaard 1 kudo geven ?
Wel je kan natuurlijk altijd inserter en als de duplicate key af gaat dan weet je dat je moet updaten

mysql heeft een mogelijkheid met de volgende contructie:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]

let wel dat mysql de enige database is waarbij je z'n krom statement kunt gebruiken.

Bij ORACLE en PostGreSql zal je de waarden door kunnen geven aan een procedure waarbij je de exception handler het werk laat doen

<?php 
$q = "SELECT * FROM KudoId WHERE topic_id = 122";
$result = mysql_query($q);
$num = mysql_num_rows($result);

if($num != 0) {
// Code voor +/- hier als er al een record staat
} else {
// Code voor +/- hier als er geen record staat, dus insert.
}
?>
Nee, niet doen. De database engine niet gebruiken om foutmeldingen te ontvangen en daarop te reageren. Bij hoge transactie-aantallen vreet dit onnodig cpu en i/o tijd. In je datamodel beginnen met oplossen van deze issues, in dit geval gewoon standaard kudo (??) op (numeriek) nul dus niet NULL zetten. Geldt ook voor Oracle en Postgres. Geen exception handlers bouwen die de database nogmaals bevragen alleen om fouten in de datamodellering op te lossen.
@Noppes:

<?php
INSERT INTO KudoId (waarde, post_id, page) VALUES (1, 471, 'nieuws') ON DUPLICATE KEY UPDATE waarde = waarde +1 UPDATE KudoId SET waarde = waarde +1 WHERE post_id = 471 AND page = 'nieuws'
?>

Dit geeft gewoon een foutmelding.

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET waarde = waarde +1 WHERE post_id = 471 AND page = 'nieuws'' at line 1
'nieuws''
single quote, dubbel quote ?
echo je query en check die.
@john... waar?

ik voer text alleen tussen single quotes uit
Hey,

Als goed is moet dit werken... wel even de querys enzo een goede fout afhandeling geven, en de namen goed maken..


<?php 
$sql = mysql_query("SELECT * FROM KudoId");

if(mysql_num_rows($sql) == 0)
{
	if($action == 'plus')
	{
		$ins = mysql_query("INSERT INTO KudoId (blaat, blaat, blaat) VALUES (blaat, blaat, blaat)");
	}
	elseif($action == 'min')
	{
		$ins = mysql_query("INSERT INTO KudoId (blaat, blaat, blaat) VALUES (blaat, blaat, blaat)");
	}
	
}
else
{
	if($action == 'plus')
	{
		$upd = mysql_query("UPDATE KudoID SET blaat = blaat+1 WHERE blaat = blaat");
	}
	elseif($action == 'min')
	{
		$upd = mysql_query("UPDATE KudoID SET blaat = blaat-1 WHERE blaat = blaat");
	}
}
?>



Gr,
toch vond ik die ON DUPLICATE UPDATE vele malen sexier.

Reageren