Dans le développement quotidien, nous devons souvent obtenir l'ensemble de résultats à partir de la base de données MySQL et traverser l'ensemble de résultats. Par défaut, le jeu de résultats renvoyé par MySQLI_Query est stocké dans l'ordre des requêtes. Si nous voulons un ensemble de résultats, il existe plusieurs façons de le faire, l'un des moyens simples et efficaces est d'utiliser la fonction MySQLI_RESULT :: DATA_SEEK de PHP.
mysqli_result :: data_seek est une méthode fournie par PHP qui permet aux développeurs de déplacer le pointeur interne de l'ensemble de résultats sur une ligne spécifiée. L'utilisation de base est la suivante:
<span><span>mysqli_result::</span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ offset représente l'indice de la ligne cible, à partir de 0 .
La valeur de retour est de type booléen, si True est renvoyé avec succès, FALSE est renvoyé si false est échoué.
Lorsque nous voulons traverser les résultats définis dans l'ordre inverse , le moyen le plus direct est de lire à partir de la dernière ligne de l'ensemble de résultats sans avoir à utiliser l'ordre par ... DESC dans SQL Query. Cela peut réduire la pression sur la base de données dans certains cas, en particulier lorsque le volume de données est très important.
Supposons que nous ayons des utilisateurs de table MySQL qui contient l' ID et le nom de champ, et que nous voulons sortir la liste d'utilisateurs dans l'ordre inverse:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>->num_rows;
</span><span><span class="hljs-comment">// Ensemble de résultats de traversée d'ordre inversé</span></span><span>
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-variable">$num_rows</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> >= </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>--) {
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>); </span><span><span class="hljs-comment">// Déplacer le pointeur interne vers le $i D'ACCORD</span></span><span>
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">", Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La requête a échoué: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>$ result-> num_rows obtient le nombre total de lignes de l'ensemble de résultats.
La boucle FOR commence à partir de la dernière ligne $ num_rows - 1 et avance étape par étape.
Utilisez $ result-> data_seek ($ i) pour localiser la ligne spécifiée.
Appelez $ result-> fetch_assoc () pour obtenir les données de ligne actuelles.
Cette méthode ne nécessite pas de modifier l'ordre de requête SQL et est très utile dans certains scénarios où contrôle dynamiquement l'ordre de traversée.
avantage :
Simple et facile à utiliser, contrôlez directement l'ordre de traversée au niveau PHP.
Très efficace pour les petits ensembles de résultats.
Notes :
Pour les grands ensembles de résultats, si la consommation de mémoire est trop élevée, il est toujours recommandé d'utiliser l'ordre pour trier à la couche SQL.
DATA_SEEK s'applique uniquement aux objets MySQLI_RESULT renvoyés par MySQLI_Query , et non aux requêtes non tamponnées.
Avec mysqli_result :: data_seek , nous pouvons facilement implémenter la traversée de l'ordre inverse de l'ensemble de résultats sans s'appuyer sur la fonction de tri de SQL. Il fournit aux développeurs PHP des méthodes de contrôle plus flexibles, en particulier adaptées aux scénarios où les résultats de la requête sont traités dynamiquement.
Étiquettes associées:
mysqli_result