我是PHP和mysql的新手,所以这可能是一个容易回答的问题。
我正在拍摄"图像A与图像B" site(只是这样我可以学习一些PHP + mysql概念)。
屏幕上会加载两张图片,点击您最喜欢的图片。如果您点击图片A,它会将+1添加到其评级中,而图片B会将+ 1添加到其评级中。我希望正面投票和反对投票是分开的,这就是为什么我不能只使用一个价值。
表格如下;
imageID | votesUP | votesDOWN
X54vb | 1 | 0
pe9D3 | 0 | 1
如果图片X54vb
违反了图片pe9D3
并赢了,那么该表就像上面的例子一样。
我想创建一个查询来增加值(如果它不存在则创建条目)。
$voteup
是此示例中的图片ID;
REPLACE INTO images SET votesUP = votesUP + 1, imageID = '" . $voteup . "';
如果条目不存在,则创建条目,但如果条目不存在则不增加条目。该值始终为1。
我也试过了;
UPDATE images SET votesUP = votesUP + 1 WHERE imageID = '" . $voteup . "';
这会增加该值,但如果不存在,则不会创建该条目。当匹配$voteup
的条目尚未创建时,似乎没有任何事情发生。
所以,基本上,我希望只有一个查询可以创建一个条目(如果它不存在),如果它存在则递增它。
我宁愿不尝试从条目中读取以确认它是否存在,然后创建一个条目(如果它不是,然后递增它)。如果可能的话,我想要一个有效的单一查询。
这是我创建的表格;
CREATE TABLE images
(
imageID CHAR(15),
votesUP INT DEFAULT 0,
votesDOWN INT DEFAULT 0,
PRIMARY KEY (imageID)
)"
另外,REPLACE INTO
和UPDATE
之间究竟有什么区别?
感谢。
答案 0 :(得分:0)
你需要的是使用INSERT ... ON DUPLICATE KEY UPDATE ...
我认为这就是你所需要的。
INSERT INTO images ( imageID, votesUP ) values
( '" . $voteup . "', 1 )
ON DUPLICATE KEY UPDATE votesUP=votesUP+1;
但这只是增量,减量将是另一种方式
INSERT INTO images ( imageID, votesDOWN ) values
( '" . $voteup . "', 1 )
ON DUPLICATE KEY UPDATE votesDOWN=votesDOWN+1;
答案 1 :(得分:0)
如果记录不存在,则REPLACE INTO执行INSERT,或者当记录存在时替换它。您不能使用之前的值(x = x + 1),因为它会替换它。它通常只用于导入脚本和那种丑陋的东西。在大多数情况下,您希望使用UPDATE。
如您所述,如果记录尚不存在,则无法更新。所以你应该首先检查它是否存在,如果它还不存在则插入它。另一种方法是尝试UPDATE,查看受影响的行(返回),然后INSERT 0受影响的行。第一种解决方案是更常见的解决方案。在这两种情况下,您必须分两步完成。
我对您的数据模型有一些评论(如果您不介意的话):
编辑:正如Jorge Campos和bjarkig82所说,ON DUPLICATE KEY UPDATE是一个很好的解决方案,可以在一个双步骤中完成此操作
答案 2 :(得分:0)
您是否尝试过: this?
在您的情况下,您可以使用:
INSERT INTO images
(imageID, votesUP,)
VALUES
($voteup, 1)
ON DUPLICATE KEY UPDATE
votesUP = votesUP + 1;