Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 SQL选择计数两个条件_Mysql - Fatal编程技术网

Mysql SQL选择计数两个条件

Mysql SQL选择计数两个条件,mysql,Mysql,我正在制作一份在线表格。在用户填写此表单之前,会要求用户选择表单类型和表单年份。这些值分别放在$formType和$year中 我想阻止用户两次提交相同的表单,即如果用户试图提交2011年的表单,并且数据库中已经存在一个表单,那么他将被阻止这样做 因此,我需要一个带有两个条件的SELECT COUNT函数,从php变量中获得。 到目前为止,我已经在SQL中实现了这一点,但仅在使用一个条件时,如下所示: SELECT COUNT(`formType`) FROM `table1`

我正在制作一份在线表格。在用户填写此表单之前,会要求用户选择表单类型和表单年份。这些值分别放在$formType和$year中

我想阻止用户两次提交相同的表单,即如果用户试图提交2011年的表单,并且数据库中已经存在一个表单,那么他将被阻止这样做

因此,我需要一个带有两个条件的SELECT COUNT函数,从php变量中获得。 到目前为止,我已经在SQL中实现了这一点,但仅在使用一个条件时,如下所示:

SELECT COUNT(`formType`)
    FROM `table1`
    WHERE `formType` = '$formType' ;
然而,当我尝试过滤这两个条件时,它不起作用。代码如下:

SELECT COUNT(*)
    FROM (
    SELECT DISTINCT 'year', 'formType' 
    FROM `table1`
    WHERE `year` = '$year' AND 'formType' = '$formType')

有什么想法吗?非常感谢

使用“或”代替“和”

select count (*) 
from table1
where (year = $year) or (formtype = $formtype)

为什么您认为需要子查询?下面应该做什么

SELECT COUNT(*)
    FROM `table1`
    WHERE `year` = '$year' AND `formType` = '$formType'

您可能希望允许每个用户每年使用一个表单类型,所以您希望在查询中添加第三个条件,例如
和userID=xx
(除非每个用户有一个表)。

这是否有效:
从表1中选择count(*),其中year='$year'和formtype='$formtype'
?不抱歉。如果我使用其中一个条件,那么它是有效的,但不是同时对两个条件都有效。这是什么结果?任何错误或错误计数?对于一个条件,它工作得很好,即如果我将该条件保留一年,并且我已经有一个年份为2007的表单,那么当我尝试输入一个年份也为2007的表单时,我是不允许这样做的。如果我使用表单类型条件,也会发生同样的情况。我的问题是:为什么给出2个条件对你不起作用?如果您提供2个条件,是否会出现任何错误?或者,当您提供2个条件时,您是否计数错误?据我所知,OP希望每年允许使用一个formtype,使用
将是错误的。@Ain:现在可能是这样,但问题第一次发布时不清楚。一个常见的初学者错误是当他们表示“或”时使用“和”。嗨,谢谢,这很有效。然而,我早些时候就尝试过这样做,但它以前不起作用。我似乎是在键入“formType”而不是“formType”,这就是为什么它不起作用的原因。@darryl schembri-如果这回答了你的问题,最好是将这个答案标记为已接受。