【问题标题】:Select whether cl.t_sc_1=1 OR cl.t_sc_2=1 OR cl.t_sc_3=1 AND column1=10选择 cl.t_sc_1=1 OR cl.t_sc_2=1 OR cl.t_sc_3=1 AND column1=10
【发布时间】:2017-03-27 05:46:24
【问题描述】:

我有一个类似的查询

SELECT DISTINCT SQL_CALC_FOUND_ROWS cl.id AS id,
cl.column1 AS column1,
cl.column2 AS column2,
cl.column3 AS column3,
cl.t_sc_1 AS t_sc_1,
cl.t_sc_2 AS t_sc_2,
cl.t_sc_3 AS t_sc_3
FROM classifieds AS cl
WHERE (cl.t_sc_1 = 1 OR cl.t_sc_2 = 1 OR cl.t_sc_3 = 1)
AND column1 = 10 AND column2=10 AND column3=10
ORDER BY cl.id ASC

我想得到结果是否(t_sc_1 =1 OR t_sc_2 =1 OR t_sc_3=1)或 the_three_columns=1 AND column1=10 等等,...我得到结果,其中 t_sc_1 =1 和 t_sc_2=1 和t_sc_3 =1 和 column1=10 等等。 因此,只有 t_sc_1 =1 的行或只有 column3 =1 的行不会显示在结果中。

真正的查询是动态的,有时'OR'部分包括两个cl.t_sc_1=1(如(cl.t_sc_1=1 OR cl.t_sc_2=1))有时包括三个like。

我知道子句是否不存在,但有办法实现吗?

感谢您的帮助

【问题讨论】:

  • 提供您的代码

标签: php mysql


【解决方案1】:

我们打电话

column1 = 1   as  a
column2 = 1   as  b
column3 = 1   as  c
column4 = 10  as  d

你说你想要的是:

(a + b + c) + (a.b.c.d)
= a + b + c + a.b.c.d

使用布尔代数相当于:

a + b + c.(1 + a.b.d)
= a + b + c.1
= a + b + c

意思是:

where (
    column1 = 1
    or column2 = 1
    or column3 = 1
    )
or (
    column1 = 1
    and column2 = 1
    and column3 = 1
    and column4 = 10
    )

相当于:

where column1 = 1
    or column2 = 1
    or column3 = 1

或者:

where 1 in (column1, column2, column3);

【讨论】:

  • 你能帮我吗here
  • @Cactux - 不工作 信息量不大。请编辑您的问题并提供示例数据、预期输出和输出背后的逻辑。
【解决方案2】:

您当前的查询省略了您口头向我们描述的一些逻辑。试试这个:

select *
from yourTable
where (column1 = 1 or column2 = 1 or column3 = 1) or
      ((column1 = 1 and column2 = 1 and column3 = 1) and column4 = 10)
order by id asc

使用此逻辑,将返回只有 column2=1 的记录。

【讨论】:

  • 我正在这样做:select * from yourTable where (column1 = 1 or column3 = 1) or ((column1 = 1 and column3 = 1) and column4 = 10) order by id asc 但是没有显示只有 column1=1 的结果或只有 column3=1 的结果
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 2020-07-16
  • 2012-11-15
  • 1970-01-01
  • 2019-03-19
  • 2010-10-14
  • 2015-12-07
  • 1970-01-01
相关资源
最近更新 更多