SQL(MYSQL)中的OR操作

SQL(MYSQL)中的OR操作,mysql,sql,join,Mysql,Sql,Join,我正在使用MYSQL SELECT m.proposalId, m.title, n.stageNumber, n.committeeId, n.modifiedDate, o.msNumber , o.description,o.ics,o.edition FROM mystands_Proposal m INNER join mystands_ProjectLifecycle n on m.proposalId = n.proposalId INNER join

我正在使用MYSQL

SELECT m.proposalId, m.title, n.stageNumber, n.committeeId, n.modifiedDate, o.msNumber , o.description,o.ics,o.edition FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n on m.proposalId = n.proposalId 
INNER join  
    mystands_Project o on m.proposalId = o.proposalId 
WHERE 
    n.newState=0  AND n.committeeId=79827 AND (n.assignedTo=29913 OR n.actionBy=29913) AND n.proposalId LIKE '%sdas%' AND o.projectNumber LIKE '%sdass%' AND n.stageNumber=40.92 AND o.category=1 AND o.degreeofCorrespondence=1 AND o.msNumber LIKE '%sdas%' AND (n.modifiedDate <='2015-05-15' AND n.stageNumber=40.2) AND (n.modifiedDate <='2015-05-07' AND n.stageNumber=30.99) AND (n.modifiedDate <='2015-05-27' AND n.stageNumber=55.99)
我为三个表执行内部联接以实现搜索功能,在java中,如果用户输入值,那么我会动态地将值附加到sql查询中。上面的代码对于字段之间的和操作很好

如何执行或操作用户输入的字段并显示结果 事实上如果我试过这个

SELECT m.proposalId, m.title, n.stageNumber, n.committeeId, n.modifiedDate, o.msNumber , o.description,o.ics,o.edition FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n on m.proposalId = n.proposalId 
INNER join
    mystands_Project o on m.proposalId = o.proposalId  
WHERE 
    n.newState=0      OR n.committeeId=80246 OR (n.assignedTo=79977 OR n.actionBy=79977) OR n.proposalId LIKE '%ads%' OR o.projectNumber LIKE '%sds%' OR n.stageNumber=30.99 OR o.category=1 OR o.degreeofCorrespondence=1 OR o.msNumber LIKE '%sadsa%' OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99) 
现在发生的事情是,它给了我内部联接的结果,因为newState=0为真且完整,其中条件为真,我在三个表上得到了内部联接的结果,结果没有得到所需的过滤

你能告诉我哪里出了问题吗
谢谢

如果你得到的一切都是因为newstate=0总是正确的,那么你只需要这样说,如果我误解了,那么我道歉,但据我所知,这似乎是问题所在:

因为newState=0为真,且条件为真时为全


在代码中的某个地方保留一个记录,记录您添加了多少where条件,如果它大于0,则添加“and…”。。。。。。由于我不知道生成此查询的代码看起来像什么,因此我无法进一步帮助您

不清楚您的目标是什么。如果您可以为SQLFIDLE提供数据样本和预期结果,这将非常有帮助

WHERE 
n.newState=0
    AND (
    n.committeeId=80246 OR (n.assignedTo=79977 OR n.actionBy=79977) OR n.proposalId LIKE '%ads%' OR o.projectNumber LIKE '%sds%' OR n.stageNumber=30.99 OR o.category=1 OR o.degreeofCorrespondence=1 OR o.msNumber LIKE '%sadsa%' OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99)
    )
一般来说,从我临终前开始,你通常应该有以下几点:

SELECT 
  m.proposalId, m.title, 
  n.stageNumber, n.committeeId, n.modifiedDate, 
  o.msNumber , o.description,o.ics,o.edition 
FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n 
ON m.proposalId = n.proposalId 
   AND n.newState=0
   AND ( n.committeeId=80246 
        OR n.assignedTo=79977 
        OR n.actionBy=79977
        OR n.proposalId LIKE '%ads%'
        OR n.stageNumber=30.99
        OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) 
        OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) 
        OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99)
   )
INNER join
    mystands_Project o 
ON m.proposalId = o.proposalId  
   AND ( o.projectNumber LIKE '%sds%' 
        OR o.category=1
        OR o.degreeofCorrespondence=1 
        OR o.msNumber LIKE '%sadsa%')

您需要将括号放在正确的位置,以获得所需的逻辑。鉴于您在文本中的描述,不清楚为什么您的where条件不是您真正想要的。您好,戈登,如果用户在搜索表单中输入值,那么我将在newState=0后的where子句中追加该值
SELECT 
  m.proposalId, m.title, 
  n.stageNumber, n.committeeId, n.modifiedDate, 
  o.msNumber , o.description,o.ics,o.edition 
FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n 
ON m.proposalId = n.proposalId 
   AND n.newState=0
   AND ( n.committeeId=80246 
        OR n.assignedTo=79977 
        OR n.actionBy=79977
        OR n.proposalId LIKE '%ads%'
        OR n.stageNumber=30.99
        OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) 
        OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) 
        OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99)
   )
INNER join
    mystands_Project o 
ON m.proposalId = o.proposalId  
   AND ( o.projectNumber LIKE '%sds%' 
        OR o.category=1
        OR o.degreeofCorrespondence=1 
        OR o.msNumber LIKE '%sadsa%')