如何选择不是' 0&#39 ;?的MYSQL行?

时间:2016-10-13 22:09:34

标签: mysql

我使用以下方法在Wordpress中过滤我的数据库:

$count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(rid) FROM $table_name WHERE rid = ( SELECT id FROM $table_name WHERE pid = '%s' AND activated != 0 )", $pid ) );

目前$count4,而3应为activated = 0,因为我的数据库中的最后一个条目为'0',如此屏幕截图所示:

enter image description here

黄色=目标行,而最后一行应作为%s进行过滤,不计算在内。

pid?pid=123…(个人ID)的变量,由字符串{{1}}接收。这确实有效,并不是问题,因为属于示例pid(绿色)的所有黄色行都会被计算。

我的错误在哪里?

4 个答案:

答案 0 :(得分:1)

NULL与空字符串或0整数之间存在很大差异。 IS NOT运算符用于NULL比较,因为NULL=NULL为false。

你应该这样做:

activated=0

或者这个:

activated IS NOT NULL

如果您在该列中允许NULL,则可能需要针对0NULL状态进行测试,或者将其翻转到此处:

activated!=1

答案 1 :(得分:1)

如果激活是数字,则应使用

SELECT id FROM $table_name WHERE pid = '%s' AND activated <> 0 

或if是一个字符串

SELECT id FROM $table_name WHERE pid = '%s' AND activated <> '0' 

答案 2 :(得分:1)

如果在SQL中比较[value] = NULL,则结果为NULL。

因此,当您想要过滤所有未激活的行时,&#39; 0&#39;那么你应该这样做:

SELECT id FROM $table_name WHERE pid = '%s' AND activated IS NOT '0' OR activated IS NULL

其他解决办法可以是:

SELECT id FROM $table_name WHERE pid = '%s' AND COALESCE(activated,'NULL')  <> '0'

答案 3 :(得分:1)

SELECT COUNT(rid) FROM $table_name WHERE rid = ( SELECT id FROM $table_name WHERE pid = '%s' AND activated != 0 )", $pid ) AND activated != 0

将此 AND激活!= 0 添加到rid()

的结尾