仅当某个字段不为空时才从MySQL中提取数据

时间:2011-09-02 00:58:56

标签: php mysql

我正在尝试使用WHERE语句来提取字段t.twittername不为空的信息。下面的代码不起作用。我可以使用什么样的WHERE语句?

编辑:我尝试了WHERE t.twittername IS NOT NULL,但仍然无效。

编辑:我现在正在显示完整的SQL语句。

以下是表tweets的SQL:

CREATE TABLE IF NOT EXISTS `tweets` (
  `tweetid` bigint(11) NOT NULL AUTO_INCREMENT,
  `city` varchar(100) CHARACTER SET latin1 NOT NULL,
  `submissionid` varchar(11) CHARACTER SET latin1 NOT NULL,
  `shorturl` varchar(1000) CHARACTER SET latin1 NOT NULL,
  `loginid` varchar(11) CHARACTER SET latin1 NOT NULL,
  `twittername` varchar(1000) CHARACTER SET latin1 NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`tweetid`)

代码:

 $sqlStr3 = "SELECT
                 l.username 
                 ,l.loginid  
                 ,t.tweetid 
                 ,t.shorturl 
                 ,t.twittername 
                 ,t.time
                 ,s.submissionid 
                 ,s.title
                 ,s.url 
                 ,s.displayurl 
                 ,s.datesubmitted
                 ,s.points
                 ,COUNT(t.tweetid) countTweets 
        FROM tweets AS t        
      WHERE TRIM (t.twittername) IS NOT NULL AND TRIM(t.twittername) != ''
  INNER JOIN login AS l ON t.loginid = l.loginid
  INNER JOIN submission AS s ON t.submissionid = s.submissionid
        GROUP BY t.tweetid  
    ORDER BY t.time DESC
       LIMIT $offset, $rowsperpage";

2 个答案:

答案 0 :(得分:2)

WHERE t.twittername IS NOT NULL 

编辑 - 评论后:

尝试这个“极端”版本来检查字符串字段的空白:

WHERE TRIM (t.twittername) IS NOT NULL AND TRIM(t.twittername) != ''

编辑2 - 另一点:

您的SQL语句很奇怪 - 您引用s但我看不到s而您使用COUNT但我看不到GROUP BY和我也期待某种JOIN,我看不到......请展示真实的陈述......

编辑3 - OP显示声明和表格定义后:

我实际上不明白这句话应该产生什么但是试一试:

SELECT
             l.username 
             ,l.loginid  
             ,t.tweetid 
             ,t.shorturl 
             ,t.twittername 
             ,t.time
             ,s.submissionid 
             ,s.title
             ,s.url 
             ,s.displayurl 
             ,s.datesubmitted
             ,s.points
             ,COUNT(t.tweetid) countTweets 
    FROM tweets AS t        
INNER JOIN login AS l ON t.loginid = l.loginid
INNER JOIN submission AS s ON t.submissionid = s.submissionid
  WHERE TRIM (t.twittername) IS NOT NULL AND TRIM(t.twittername) != ''
    GROUP BY 
             l.username 
             ,l.loginid  
             ,t.tweetid 
             ,t.shorturl 
             ,t.twittername 
             ,t.time
             ,s.submissionid 
             ,s.title
             ,s.url 
             ,s.displayurl 
             ,s.datesubmitted
             ,s.points
ORDER BY t.time DESC
   LIMIT $offset, $rowsperpage

答案 1 :(得分:1)

您可以使用is运算符测试列是否为空:

-- ...
WHERE t.twittername IS NOT NULL;

此外,不要混淆缺少数据(NULL)和空字符串('',其中 一个值)。如果要测试字符串是否为空,请执行以下操作:

-- ...
WHERE t.twittername = '';