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";
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 :
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)); }
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']; }
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!