Maison > développement back-end > tutoriel php > Comment exécuter efficacement plusieurs requêtes en PHP/MySQL ?

Comment exécuter efficacement plusieurs requêtes en PHP/MySQL ?

Barbara Streisand
Libérer: 2024-11-11 19:16:02
original
413 Les gens l'ont consulté

How to Efficiently Execute Multiple Queries in PHP/MySQL?

Exécuter plusieurs requêtes pour des données complètes en PHP/MySQL

Lorsqu'il s'agit d'une analyse de données complexe, l'exécution de plusieurs requêtes en PHP/MySQL peut fournir une solution transparente. Cependant, concaténer plusieurs requêtes et récupérer manuellement les résultats peut s'avérer difficile. Cet article explore une technique utilisant mysqli_multi_query($link, $query) pour exécuter plusieurs requêtes à la fois.

Considérez l'extrait de code suivant :

$query = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X;";
$query .= "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH);";
$query .= "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank ON (current_rankings.player = previous_rankings.player);";
$query .= "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output";
Copier après la connexion

Ce code exécute une série de requêtes pour créer des vues et sélectionner des données. Cependant, pour récupérer les résultats à l'aide de mysql_fetch_array, les requêtes doivent être exécutées comme une seule requête concaténée.

Utilisation de mysqli_multi_query

La fonction mysqli_multi_query vous permet d'exécuter plusieurs requêtes concaténées en une seule opération. Pour ce faire, vous devez :

  1. Concaténer vos requêtes avec la syntaxe appropriée.
  2. Initialiser votre connexion MySQL à l'aide de mysqli_connect.
  3. Utiliser mysqli_multi_query pour exécuter les requêtes concaténées .
  4. Stockez le premier ensemble de résultats en utilisant mysqli_store_result.
  5. Parcourez les résultats à l'aide de mysqli_fetch_array.

Exemple avec mysqli_multi_query :

$link = mysqli_connect("server", "user", "password", "database");

$query = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X;';";
$query .= "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH;';";
$query .= "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank ON (current_rankings.player = previous_rankings.player;';";
$query .= "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output";

if (mysqli_multi_query($link, $query)) {
    do {
        if ($result = mysqli_store_result($link)) {
            while ($row = mysqli_fetch_array($result)) {
                echo $row['player'] . $row['current_rank'] . $row['prev_rank'] . $row['rank_change'];
            }
            mysqli_free_result($result);
        }
    } while (mysqli_next_result($link));
}
Copier après la connexion

Méthode alternative : exécution Requêtes Séparément

Exécuter des requêtes séparément vous permet de contrôler l'ordre d'exécution et d'utiliser des tables temporaires. Pour exécuter des requêtes séparément, vous pouvez utiliser :

$query1 = "Create temporary table A select c1 from t1";
$result1 = mysqli_query($link, $query1) or die(mysqli_error());

$query2 = "select c1 from A";
$result2 = mysqli_query($link, $query2) or die(mysqli_error());

while ($row = mysqli_fetch_array($result2)) {
    echo $row['c1'];
}
Copier après la connexion

Cette méthode vous oblige à créer des tables temporaires et à exécuter des requêtes supplémentaires pour en récupérer des données.

Le choix de la bonne méthode dépend de votre spécificité besoins. Si vous avez besoin d'un seul jeu de résultats à partir de plusieurs requêtes, mysqli_multi_query est une option appropriée. Toutefois, si vous avez besoin de plus de flexibilité et de contrôle sur l'ordre d'exécution, il peut être préférable d'exécuter les requêtes séparément.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal