MySQL选择行并忽略列为空的行

4

使用Dreamweaver CS5 / MySQL

我正在尝试设置一个查询,只显示具有特定列中数据的行。如果Charname列为空,我不想显示该行。

目前查询是有效的,但当Charname列为空时,它也会显示相关行。我一直在努力设置并一再失败。谢谢。

mysql_select_db($database_login_form, $login_form);
$query_Recordset1 = "SELECT * FROM users";
$Recordset1 = mysql_query($query_Recordset1, $login_form) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);


<?php do { ?>
<li><a href="profile.php?id=<?php echo $row_Recordset1['id']; ?>"><?php echo $row_Recordset1['Charname']; ?></a></li>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

你难道不只需要在查询中添加"SELECT * FROM users",使其包含一个WHERE column_name IS NOT NULL子句吗? - anandsun
$query_Recordset1 = "SELECT * FROM users WHERE charname != '' AND charname IS NOT NULL"; 这就是您要找的,但我认真建议您学习基本 SQL,因为这是最基础的课程之一。 - John Bell
SELECT * FROM users WHERE something != ""; - geekzeus
如果您想检查所有列,请查看此处以获取更好的解决方案 - Ahmed Sunny
很抱歉,但是为什么你使用 do while 呢?即使从数据库中获取的数据为空,do while 也会被执行至少一次。如果你尝试只使用 while,会怎样呢?谢谢 :) - Rizal Sidik
添加WHERE子句并没有改变显示的内容。它仍然显示空行。 - Cyndi
2个回答

4

将您的查询更新为以下格式

SELECT * FROM users where Charname IS NOT NULL or Charname != '';

您也可以使用 COALESCE() 用于检查空值

SELECT * FROM users WHERE COALESCE(Charname, '') != '';

更多信息请参考:

https://www.w3schools.com/sql/sql_isnull.asp

您还可以在PHP端进行检查,例如:

假设有这样一个情况:

$Charname = $row_Recordset1['Charname'];
if($Charname == '' || $Charname === null || is_null($Charname)){
   continue;
}

添加Where / Null语句并不改变问题。如果Charname列为空,它仍然会显示该行。 - Cyndi
欢迎您,通常第一个答案就可以解决问题,但如果为空字符串,则使用第二个答案。您也可以使用 PHP 进行检查。 - Shafiqul Islam

4

您可以使用 COALESCE() 将空白(空字符串)和 NULL 视为相同的内容:

SELECT * FROM users WHERE COALESCE(Charname, '') != ''

您从未告诉我们“empty”的确切含义,但可以猜测是空字符串或NULL

这解决了我的问题,非常感谢。我已经花了几个小时尝试不同的方法,当普通的 where / null 语句不起作用时,我就卡住了。再次感谢你。<3 - Cyndi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接