Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL仅当另一个表中不存在两列的唯一密钥对时,如何更新表?_Mysql_Insert - Fatal编程技术网

MYSQL仅当另一个表中不存在两列的唯一密钥对时,如何更新表?

MYSQL仅当另一个表中不存在两列的唯一密钥对时,如何更新表?,mysql,insert,Mysql,Insert,我正在建立一个投票程序,我想限制用户最多投一票。我有两张表:(a)主题表和(b)投票表 **Subject_Table** SID Subject Total_Votes 1 Cows 5 2 Chickens 3 **Vote_Table** VID Subject User Voteup 1 Cows John 1

我正在建立一个投票程序,我想限制用户最多投一票。我有两张表:(a)主题表和(b)投票表

**Subject_Table**              

SID   Subject   Total_Votes          
1     Cows      5     
2     Chickens  3     


**Vote_Table**

VID   Subject   User    Voteup           
1     Cows      John    1     
总票数等于所有用户的票数。如果对某个主题进行投票,Voteup只能等于1。我与主题和用户建立了一个独特的价值对,以下陈述没有任何问题:

ALTER TABLE Vote_Table ADD UNIQUE limitvote(Subject,User);
第一次投票时,将执行以下查询:

$sql="INSERT INTO Vote_Table (Subject, User,Voteup) VALUES ('$Subject', '$User', '$Voteup') ON DUPLICATE KEY UPDATE up=1";
$q = "UPDATE Subject_Table SET Total_Votes = $votes_up= //current votes plus 1;
即使John投了两次票,由于ON DUPLICATE KEY UPDATE up=1,投票表中的票数始终等于1。但在主题表中并非如此。没有限制,约翰可以无限投票。约束必须是主题-用户对。约束不能是唯一的主题或用户,因为John可以投票给其他主题,其他用户可以投票给奶牛


在我更新Subject_表之前,如何检查Vote_表以查看唯一的Subject用户对(Cows和John)是否存在?

您可以将其合并到
WHERE
子句中:

UPDATE Subject_Table
   SET Total_Votes = Total_Votes + 1
 WHERE Subject = ...
   AND NOT EXISTS
        ( SELECT 1
            FROM Vote_Table
           WHERE Subject = ...
             AND User = ...
        )
;
也就是说,我不确定您是否真的需要
主题表
;您可以在
投票表
上创建一个视图,该视图将为您提供相同的信息,而无需创建单独的表。(请参阅。)可能是这样的:

CREATE VIEW Subject_View AS
SELECT Subject,
       COUNT(1) AS Total_Votes
  FROM Vote_Table
 GROUP
    BY Subject
;

非常感谢!这很有效。我以前尝试过以不同形式存在的WHERE,但无法使其工作。这都是关于语法的。至于视图建议,我将创建一个视图,但是我的表比我在这里介绍的要复杂得多。不过,谢谢你的周到建议!