【问题标题】:How to leave NULL data in the database.with SELECT statement?如何在 database.with SELECT 语句中保留 NULL 数据?
【发布时间】:2020-12-30 10:23:42
【问题描述】:

我的用户可以将图片和消息发布到我的 php 数据库。但我希望他们能够将其中任何一个留空。问题是当我从数据库调用时,我要么显示一个损坏的图片徽标,要么显示空文本框,如果它们留空的话。

我需要我的 SELECT 语句不收集行中包含 NULL 的任何列,因此它不会显示在提要中。

我读过的所有其他帖子都找到一个 NULL 条目并跳过整行。

这不是代码,但可以说明我想要它做什么:

$result = mysqli_query($db, "SELECT * FROM user_posts SELECT '除 NULL 之外的所有行条目';") ;

$result = mysqli_query($db, "SELECT * FROM user_posts ORDER BY post_id DESC;") ;
                    
                    while ($row = mysqli_fetch_array($result)) {


                              echo "<div class='Timg_div'>";



                            if (is_null (post_message)) {

                                echo "<textarea class='title_post' placeholder='No Title Here'>".$row['post_message']. "</textarea>";
                                }
                        else    {
                            
                                echo "<textarea class='title_post' placeholder='No Title Here' style='display: none;'>".$row['post_title']. "</textarea>";
                                }       
                           
                            if (is_null (post_image)) {

                               echo "<img src='uploads/".$row['post_image']."' class='image_feed' >";

                                }
                        else    {

                               echo "<img src='uploads/".$row['post_image']."' class='image_feed' style='display: none'>";
                                }   

                                echo "</div>";
                                }

【问题讨论】:

  • 您不能在不同的行上返回不同的列。您应该修复显示结果的代码,以便它检查 null 并且不显示该字段。
  • 您的另一个选择是更好地定义数据库架构本身,这样列默认值不会给您留下空值,例如默认图片或空字符串。
  • 嗨,Barmar,也许我没有正确解释。我只想返回一行。但我想省略其中没有任何数据的任何列,以便用户可以选择上传不带消息的图片或不带图片的消息。我的代码确实尝试将 null 留在后面,但它不适用于 IF 语句或 Case 语句,因此我已开始尝试使用 SELECT 语句。我将编辑我的 OP 以显示我尝试过的代码。
  • 嗨,Parttimeturtle,我已经实现了您的建议,但对我来说它看起来有点草率,这就是为什么我试图找到一个更清洁的选择。谢谢。
  • 快速思考实验:如果你设法实现你想要的,你将如何编写你的显示代码,以便它知道如果有图像就写一个img标签,而不是如果没有'吨?如果它有一个值,而不是如果它有一个 NULL,那看起来会不会和写一个不同?

标签: php sql database select null


【解决方案1】:

您可以使用is 运算符显式检查nulls:

SELECT   *
FROM     user_posts 
WHERE    post_image IS NOT NULL AND post_message IS NOT NULL -- here
ORDER BY post_id DESC

【讨论】:

  • 您好,感谢您的尝试,但这是我已经尝试过的。例如,这里的问题是它在“post_message”列中检测到 NULL,并拒绝返回整行中的任何内容,包括“post_image”。我希望它返回用户已填写的任何信息,并且只省略 NULL 字段。谢谢。
【解决方案2】:

所以我找不到让 SELECT 语句做我想做的事情的方法,但我已经让 echo 代码用 CASE 语句来做。

唯一的缺点是,如果用户在任何字段中都没有输入任何内容,那么页面中会添加一个小的“DIV”区域,我可以忍受或者可能以某种方式阻止从 SUBMIT 按钮上传 NULL。

$result = mysqli_query($db, "
SELECT               post_image
FROM                 user_posts
ORDER BY             post_id DESC
;"
);

                    while ($row = mysqli_fetch_array($result)) {

                            echo "<div class='Timg_div'>";

                    switch ($row['post_image'] != '' ) {
                    case "IS NOT NULL" :
                            
                            echo "<img src='uploads/".$row['post_image']."' class='image_feed' >";

                    break;  

                    case ""  :
                            echo "";
                                }   

                                  echo "</div>";
                            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2021-01-28
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多