Читать следующую запись - PullRequest
0 голосов
/ 04 октября 2009

Я фильтрую нулевые значения в php на MYSQL. Когда читается нулевое значение, мне нужно, чтобы MySQL прочитал следующую запись.

Как мне это сделать?

Ответы [ 4 ]

2 голосов
/ 04 октября 2009

Почему бы не отфильтровать эти нули в источнике, то есть в запросе SQL.

Добавив что-то вроде следующего в предложении WHERE.

WHERE ...  -- existing conditions
AND TheFieldOfInterest  IS NOT NULL
0 голосов
/ 04 октября 2009

Я согласен, что вам не следует запрашивать все данные, а затем фильтровать набор результатов на mysql-клиенте (ваш php-скрипт). Но:

сделал это, но я "просто" хочу узнать по-другому: D
Нет ничего плохого в том, чтобы быть любопытным. И: Больше мощности для PDO и SPL , особенно FilterIterator в этом случае.
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 будет действовать как $ result, за исключением того, что строки со значениями NULL в ['v'] будут отфильтрованы. Вам не нужно менять «потребляющий» код, т. Е. Тот же цикл foreach (или вызов функции / метода или любой другой) будет работать с $ result вместо $ filterIter.

0 голосов
/ 04 октября 2009

В php вы можете использовать функцию is_null () , чтобы определить, является ли переменная нулевой или нет

$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"];
}
0 голосов
/ 04 октября 2009

Точно так же, как уже упоминалось mjv , вы хотите сказать MySQL пропускать строки, имеющие значение NULL в определенном столбце. В вашем вопросе «Когда читается нулевое значение, мне нужно, чтобы MySQL прочитал следующую запись». : Это именно то, что MySQL будет делать , когда вы скажете ему не включать NULL в результирующий набор, задав условие WHERE.

Удачи взлома:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...