Je suis d'accord que vous ne devriez pas interroger toutes les données et puis filtrez le jeu de résultats sur le mysql-client (votre script php). Mais:
fait cela, mais je "veux" juste savoir d'une autre façon: D
Il n'y a rien de mal à être curieux. Et: Plus de puissance à
PDO et
SPL, esp.
FilterIterator dans ce cas.
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 agira comme résultat de $, sauf que les lignes avec des valeurs NULL dans [ 'v'] seront filtrés. Vous n'avez pas besoin de changer le code "consommateur", c'est-à-dire que la même méthode foreach-loop (ou appel de fonction/méthode ou autre) fonctionnerait avec $ result au lieu de $ filterIter.
Comment lisez-vous les enregistrements? –