Sonraki Kayıt Oku

4 Cevap php

Ben MYSQL üzerinde php, null değerleri filtreleme duyuyorum. Null değeri okunur, ben bir sonraki kayıt okumak için MySQL gerekir.

Bunu nasıl yapıyor hakkında gitmek mi?

4 Cevap

Neden SQL sorgusunda, yani kaynağında bu boş değerlere filtre değil.

WHERE yan tümcesinde aşağıdaki gibi bir şey ekleyerek.

WHERE ...  -- existing conditions
AND TheFieldOfInterest  IS NOT NULL

mjv önce belirtildiği gibi tam olarak, belirli bir sütuna NULL bir değere sahip satır atlamak için MySQL söylemek istiyorum. Bu sizin sorunuza duruyor gibi 'null değeri okunur, ben bir sonraki kayıt okumak için MySQL gerekir.' Bu tam olarak ne MySQL will do Eğer WHERE koşulunu belirterek tarafından belirlenen sonuç null dahil değil bunu söylemek.

Eğlenceli :) hack var

Php bir değişken boş olup olmadığını tespit etmek için is_null() işlevini kullanabilirsiniz

$result = mysql_query("SELECT foo FROM bar;");
while($values = mysql_fetch_assoc($result))
{
     if (is_null($values["foo"]))
         continue; //Skip processing of this row

     echo "Data: ".$values["foo"];
}

Ben tüm verileri sorgulamak ve daha sonra mysql-client (php script) ayarlanmış sonuç filtre olmaması gerektiği konusunda hemfikir. Ama:

done that, but I "just" want to know another way :D
meraklı olmak yanlış bir şey yok. Ve: esp PDO ve SPL daha fazla güç,. FilterIterator, bu durumda.

class ElementIssetFilter extends FilterIterator {
  protected $index;
  public function __construct(Iterator $iter, $index) {
    parent::__construct($iter);
    $this->index = $index;
  }

  public function accept() {
    $c = $this->current();
    return isset($c[$this->index]);
  }
}

$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

// testtable and -data
$pdo->exec("CREATE TEMPORARY TABLE foo (id int auto_increment, v varchar(16), primary key(id))");
$pdo->exec("INSERT INTO foo (v) VALUES ('1'), (null), ('3'), ('4'), (null), ('6')");

$result = $pdo->query('SELECT id,v FROM foo');
$iter = new IteratorIterator($result);
$filterIter = new ElementIssetFilter($iter, 'v');

foreach( $filterIter as $e) {
  echo $e['id'], " ", $e['v'], "\n";
}

$ FilterIter ['v'] NULL değerlere sahip satırlar filtre olacağını dışında, $ sonucu gibi hareket edecektir. Sen aynı foreach döngü yani (ya da işlev / yöntem çağrısı ya da her neyse) $ sonuç yerine $ filterIter ile çalışacak, "tüketen" kodunu değiştirmek zorunda değilsiniz.