Maison  >  Article  >  développement back-end  >  Comment effectuer une requête d'association un-à-plusieurs à l'aide de PHP

Comment effectuer une requête d'association un-à-plusieurs à l'aide de PHP

PHPz
PHPzoriginal
2023-04-19 10:05:21922parcourir

Lors de l'utilisation de PHP pour les opérations de base de données, des requêtes de corrélation un-à-plusieurs sont souvent nécessaires. Ce type de requête peut associer une donnée d’une table à plusieurs données d’une autre table. En PHP, une requête relationnelle un-à-plusieurs aboutit généralement à un tableau à deux dimensions, dans lequel chaque élément représente un enregistrement de la table principale et les valeurs correspondantes sont des enregistrements dans plusieurs tables liées.

Cet article expliquera comment utiliser PHP pour effectuer une requête d'association un-à-plusieurs et obtenir le résultat d'un tableau à deux dimensions.

1. Qu'est-ce qu'une requête associée un à plusieurs ?

Dans la base de données, s'il existe une relation de clé primaire et étrangère entre deux tables, alors une requête d'association un-à-plusieurs peut être effectuée. Dans cette relation, un enregistrement dans une table correspond à plusieurs enregistrements dans une autre table.

Par exemple, il existe une « table des étudiants » et une « table des scores ». Chaque élève de la « table des étudiants » correspond à des enregistrements dans plusieurs « tables de scores ». Cette relation peut être liée à l'aide de clés primaires et étrangères comme indiqué ci-dessous :

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `student_id` (`student_id`),
  CONSTRAINT `score_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dans la "Table des étudiants", chaque enregistrement comprend un identifiant unique ID et un nom NOM. Dans la « table de scores », chaque enregistrement comprend le même identifiant unique et un STUDENT_ID correspondant, qui représente à quel étudiant appartient l'enregistrement. De plus, il y a un champ SCORE, qui représente le score de l'étudiant.

2. Comment effectuer une requête associée un-à-plusieurs ?

En PHP, vous pouvez effectuer des requêtes associées une à plusieurs en utilisant le mot-clé JOIN. JOIN est un mot-clé en SQL utilisé pour joindre les mêmes colonnes dans deux ou plusieurs tables et générer une grande table.

Dans l'exemple ci-dessus, si vous souhaitez associer la table des étudiants à la table des notes, vous pouvez utiliser l'instruction SQL suivante :

SELECT student.*, score.score
FROM student
LEFT JOIN score ON student.id = score.student_id;

Dans cette instruction, sélectionnez d'abord tous les champs de la table des étudiants, puis utilisez LEFT JOIN et Touches ON Le mot relie la table des scores et la table des élèves. La condition de connexion est que le champ ID dans la table des étudiants soit égal au champ STUDENT_ID dans la table des notes. Enfin, sélectionnez les colonnes à afficher via l'instruction SELECT et obtenez le résultat d'un tableau à deux dimensions.

Dans l'objet PDO de PHP, vous pouvez utiliser la méthode de requête pour exécuter l'instruction SQL ci-dessus et utiliser la méthode fetchAll pour obtenir le résultat d'un tableau à deux dimensions :

$db = new PDO('mysql:host=localhost;dbname=mydb', 'myuser', 'mypassword');
$stmt = $db->query('SELECT student.*, score.score
                    FROM student
                    LEFT JOIN score ON student.id = score.student_id');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

Dans le code ci-dessus, un objet PDO est d'abord créé , puis en utilisant la méthode de requête, exécute l'instruction SQL et utilise enfin la méthode fetchAll pour obtenir le résultat.

3. Comment traiter les résultats d'une requête d'association un-à-plusieurs dans un tableau bidimensionnel ?

Lors de l'exécution d'une requête d'association un-à-plusieurs, les données de plusieurs tables doivent être combinées dans un résultat de tableau bidimensionnel. Chaque élément de ce tableau bidimensionnel représente un enregistrement dans une table principale et les valeurs correspondantes sont des enregistrements dans plusieurs tables associées.

Ce qui suit est une façon de traiter les résultats de la requête d'association un-à-plusieurs dans un tableau bidimensionnel :

$data = array();
foreach ($result as $row) {
    $id = $row['id'];
    if (!isset($data[$id])) {
        $data[$id] = $row;
        $data[$id]['scores'] = array();
    }
    if (!empty($row['score'])) {
        $data[$id]['scores'][] = $row['score'];
    }
}

Dans le code ci-dessus, créez d'abord un tableau vide $data, qui servira de tableau bidimensionnel final résultat du tableau. Utilisez ensuite une boucle foreach pour parcourir chaque enregistrement dans les résultats de la requête et enregistrez l'ID de clé primaire de chaque enregistrement dans la variable $id.

Ensuite, vérifiez s'il existe déjà un élément avec la clé primaire $id dans le tableau $data. S'il n'existe pas, l'élément est inséré dans le tableau $data et un tableau vide nommé « scores » est créé pour contenir tous les enregistrements liés à la clé primaire. S'il existe déjà, il n'est pas nécessaire de l'insérer et l'élément existant est utilisé directement.

Lors du parcours des enregistrements, si un enregistrement dans la « table des scores » est trouvé, ajoutez le champ SCORE de l'enregistrement au tableau des scores. Étant donné qu'un enregistrement de la table principale correspond à plusieurs enregistrements de la table associée, le tableau des scores doit être enregistré sous forme de tableau bidimensionnel.

Lorsque la boucle se termine, le résultat final du tableau bidimensionnel est stocké dans le tableau $data. Chaque élément représente un enregistrement de la table principale et les valeurs correspondantes sont plusieurs enregistrements dans la table associée.

4. Exemple

Ce qui suit est un exemple complet qui montre comment effectuer une requête d'association un-à-plusieurs et traiter le résultat dans un tableau à deux dimensions :

$db = new PDO('mysql:host=localhost;dbname=mydb', 'myuser', 'mypassword');
$stmt = $db->query('SELECT student.*, score.score
                    FROM student
                    LEFT JOIN score ON student.id = score.student_id');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$data = array();
foreach ($result as $row) {
    $id = $row['id'];
    if (!isset($data[$id])) {
        $data[$id] = $row;
        $data[$id]['scores'] = array();
    }
    if (!empty($row['score'])) {
        $data[$id]['scores'][] = $row['score'];
    }
}

print_r($data);

Dans l'exemple ci-dessus, créez d'abord un objet PDO. et utiliser la méthode de requête exécute les instructions SQL. Utilisez ensuite la méthode fetchAll pour obtenir les résultats de la requête.

Ensuite, utilisez une boucle foreach pour parcourir chaque enregistrement dans les résultats de la requête et le traiter dans un tableau bidimensionnel. Enfin, utilisez la fonction print_r pour afficher les résultats.

5. Conclusion

Cet article explique comment effectuer une requête d'association un-à-plusieurs en PHP et traiter le résultat dans un tableau à deux dimensions. Lors du traitement des résultats, vous devez utiliser une boucle pour parcourir les résultats de la requête et les convertir en un tableau bidimensionnel. Une fois tous les enregistrements traités, le résultat d'un tableau bidimensionnel peut être obtenu, dans lequel chaque élément représente un enregistrement de la table principale et les valeurs correspondantes sont des enregistrements dans plusieurs tables associées.

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!

Déclaration:
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