【问题标题】:Show db row with a specific not null column in foreach loop before others are displayed在显示其他之前,在 foreach 循环中显示具有特定非空列的 db 行
【发布时间】:2012-04-25 20:26:38
【问题描述】:

我有一个列表,每个列表都有名为“顶部”的列。基本上,如果 top 不为空,我希望该列表首先显示,然后是其他列表。

现在,我的代码是这样的:

foreach ($results as $result):
    echo $result->name;
endforeach;

这将显示所有内容,但我希望“top”不为 null 的行首先显示。解决这个问题的最佳方法是什么?

【问题讨论】:

  • 您的$results 是查询的结果吗?如果是的话,可以吗?

标签: php mysql database loops foreach


【解决方案1】:

您不能将ORDER BY 应用于提供$results 的查询吗?

【讨论】:

    【解决方案2】:

    我同意 Aaron... 最好的办法是订购它们,以便它们在查询中排在第一位。

    如果由于某种原因你不能这样做,你可以做一些其他的事情:

    1. 在 PHP 中对对象或数组进行排序...可能必须使用自定义函数..如果是这种情况,请参阅:Sort Object in PHP

    2. 首先抓取只有 NULL 的行,打印它们,然后抓取不为 null 的行。

    3. 您可以循环遍历数组两次。首先只打印 NULL,然后再打印其他。

    【讨论】:

      【解决方案3】:

      试试

      foreach ($result as $row){

      然后按顺序指定你想要的每个元素。

      echo $row['top']

      echo $row['your next data row']... 并让它们完全按照你想要的方式排列。

      如果您需要格式化,请先尝试使用<pre>

      您还可以添加if 声明。

      $data = $row['top'] if($top == 1) { then echo this } else {echo the values that are null }

      【讨论】:

        【解决方案4】:

        根据您在@Aaron Bertrand 的回答下方的评论,您的 sql 中需要一个 order 子句,例如:

        ORDER BY ISNULL(`top_ad`), the_rest_of_your_order_clause
        

        【讨论】:

        • @Aaron Bertrand SQL Server?只有一个mysql标签,我提到的评论不见了。有没有提到 SQL Server?
        • 糟糕,抱歉。我不确定我是如何最终解决这个问题的。
        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 2019-09-03
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多