Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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
Php 针对单个列的MySql和运算符(一列中两行之间的比较)_Php_Mysql_Sql - Fatal编程技术网

Php 针对单个列的MySql和运算符(一列中两行之间的比较)

Php 针对单个列的MySql和运算符(一列中两行之间的比较),php,mysql,sql,Php,Mysql,Sql,我一直在尝试执行此查询,但它不起作用 如果有人帮忙,我将不胜感激 SELECT DISTINCT(fld_tech_id) FROM tbl_tech_properties WHERE fld_tech_category_value_id = 236 AND fld_tech_category_value_id = 234 您的WHERE条件不可能匹配,因为它针对表中的每一行进行测试,并且没有一行的fld_tech_category_value_id同时等于234和236。相反,

我一直在尝试执行此查询,但它不起作用

如果有人帮忙,我将不胜感激

SELECT DISTINCT(fld_tech_id) 
FROM tbl_tech_properties 
WHERE fld_tech_category_value_id = 236 
    AND fld_tech_category_value_id = 234

您的
WHERE
条件不可能匹配,因为它针对表中的每一行进行测试,并且没有一行的
fld_tech_category_value_id
同时等于234和236。相反,您应该按fld_tech_id分组,并检查您的分组是否包含两行

SELECT fld_tech_id
FROM tbl_tech_properties
WHERE fld_tech_category_value_id IN (234, 236)
GROUP BY fld_tech_id
HAVING COUNT(DISTINCT fld_tech_category_value_id) = 2
在线查看它的工作情况:

你为什么不直接用它呢

SELECT DISTINCT fld_tech_id
FROM tbl_tech_properties 
WHERE fld_tech_category_value_id IN (236,234) ;
基于参考样本数据的结果:

样本表:

FLD_TECH_ID     FLD_TECH_CATEGORY_VALUE_ID
1               234
2               256
3               236
3               250
2               226
3               216
1               240
1               236
结果:

参考文献

一个有效的解决方案:

SELECT DISTINCT fld_tech_id
FROM tbl_tech_properties AS t
WHERE EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t1
        WHERE t1.fld_tech_id = t.fld_tech_id
          AND t1.fld_tech_category_value_id = 236
      )
  AND EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t2
        WHERE t2.fld_tech_id = t.fld_tech_id
          AND t2.fld_tech_category_value_id = 234
      )  ;

参考

您能用表格数据更新您的问题吗?请与我们分享您的
tbl\u tech\u properties
表格。所以至少我们知道为什么这两个答案不正确。。。或者详细说明你所说的“不工作”是什么意思。实际结果如何?您希望得到什么样的结果?很明显,这里的查询不会产生任何结果,因为不可能使某个值等于236和234。同时,这个问题也提供了足够的信息来解决它。@TheSmose-True显然它不能同时有两个值,这就是为什么我投了正确答案的原因。这就是说,我的评论是对一个新用户的一种温和的轻推,仅仅说一些“不起作用”并不能真正帮助我们帮助他们;)@TheSmose和Mark Byers,你能分享一下你强有力的回答之间的真正区别吗;)下面我们的呢?
组的工作是由
完成的,而不是由
独立的
来完成的,我们为什么需要将结果限制为2?请启发我们。人们可以一言不发地否决投票答案。。叹气:(@bonCodigo-此查询要求用户同时拥有234和236两个类别。您的响应只需要其中一个类别。注意标题中,OP需要一个和.PS-计数(不同)=2是一种创造性的、优雅的、高效的方法,Mark标识这两个要求都得到了满足。这是查询正常工作所必需的。这是错误的,因为eit返回
1
,而没有
的行(1236)
1234
存在,这就是它返回一个的原因。然后,重新阅读问题和标题:
运算符对单个列(一列中两行之间的比较)否,他在一列中查找两行具有相同值(
fld_tech_id
),在另一列中查找两个不同值(234和236)(
fld\u tech\u category\u value\u id
)。检查2(或更多)行上的内容意味着SQL查询比使用
从一个表中选择whatever;
SELECT DISTINCT fld_tech_id
FROM tbl_tech_properties AS t
WHERE EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t1
        WHERE t1.fld_tech_id = t.fld_tech_id
          AND t1.fld_tech_category_value_id = 236
      )
  AND EXISTS
      ( SELECT *
        FROM tbl_tech_properties AS t2
        WHERE t2.fld_tech_id = t.fld_tech_id
          AND t2.fld_tech_category_value_id = 234
      )  ;