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_IDBIGINT(20) UNSIGNED(そして) MySQL にありますRatingTINYINT(2) UNSIGNEDによってレコードセットが返され$wpdb_custom->get_results()ます。

4

3 に答える 3

2

PHP でデータを処理する必要さえないように、SQL でそれを行うことができます。既存の SQL クエリの後にAND Emp_ID IS NOT NULL;. 行が返された場合は、null 以外の行がいくつかあることがわかります。何も返されない場合、それらはすべて null である必要があります。

于 2012-04-20T15:33:28.413 に答える
1
$all_null = true;
foreach($wpdb->get_results() as $row) {
    if(!is_null($row['Emp_ID'])) {
        $all_null = false;
        break;
    }
}

クエリを編集することはできないため、実行できる最善の方法は、結果を繰り返し処理してnullをチェックすることです。しかし、重要なことは、breaknull以外の行を見つけたときです。その時点で、すべての行がnullであるとは限らないことがわかっているので、残りの行をわざわざ繰り返さないでください。

于 2012-04-20T18:55:02.587 に答える
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 に答える