0

假设我的结果记录集如下:

Emp_ID    ID    Ability    Rating
------    --    -------    ------
NULL      DRI   Driving    NULL
NULL      TYP   Typing     NULL
NULL      GRA   Graphics   NULL
NULL      VID   Video      NULL
NULL      GAM   Gaming     NULL

而另一种情况可能是:

Emp_ID    ID    Ability    Rating
------    --    -------    ------
15        DRI   Driving    7
15        TYP   Typing     6
15        GRA   Graphics   8
15        VID   Video      7
15        GAM   Gaming     10

或者:

Emp_ID    ID    Ability    Rating
------    --    -------    ------
22        DRI   Driving    4
NULL      TYP   Typing     NULL
NULL      GRA   Graphics   NULL
22        VID   Video      8
22        GAM   Gaming     5

我在 PHP 中检查是否都像第一个最便宜的方法是什么?Emp_IDNULL

Emp_ID在 MySQL 中是BIGINT(20) UNSIGNED(并且Rating是)。TINYINT(2) UNSIGNED记录集由 返回$wpdb_custom->get_results()

4

3 回答 3

2

您可以在 SQL 中执行此操作,这样您甚至不必在 PHP 中处理数据。您可以只使用现有的 SQL 查询,然后使用AND Emp_ID IS NOT NULL;. 如果您返回任何行,那么您知道您有一些非空行。如果你没有得到任何回报,那么它们一定都是空的。

于 2012-04-20T15:33:28.413 回答
1

php方式是迭代数组

$аll_null = TRUE;
foreach($result as $one) $аll_null = $аll_null AND ($one->Emp_ID === NULL);
var_dump($аll_null);

编辑:

我确信该方法get_results也使用迭代,因此您可以$wpdb_custom使用另一种方法扩展您的类,如下所示:

public function get_results_custom($key, $test, &$result)
{
  * * *
  $result = TRUE
  while($row = do_some_iteration())
  {
    $result = $result AND $test($row->$key);
    * * *
  }
}

所以现在你可以这样做:

$all_null = TRUE;
$my_data = $wpdb_custom->get_results_custom('Emp_ID', 'is_null', $all_null);
if($all_null) ...
于 2012-04-20T15:41:31.797 回答
1
$all_null = true;
foreach($wpdb->get_results() as $row) {
    if(!is_null($row['Emp_ID'])) {
        $all_null = false;
        break;
    }
}

由于您无法编辑查询,因此您能做的最好的事情就是迭代检查结果是否为空。但重要的是break当你找到一个非空行时。此时您知道并非所有行都是空的,所以不要费心迭代剩余的行。

于 2012-04-20T18:55:02.587 回答