Maison  >  Article  >  cadre php  >  Comment supprimer les données en double lors de l'exécution d'une requête de jointure dans thinkphp

Comment supprimer les données en double lors de l'exécution d'une requête de jointure dans thinkphp

PHPz
PHPzoriginal
2023-04-11 09:16:101116parcourir

Dans le framework ThinkPHP, nous devons souvent effectuer des requêtes d'association multi-tables, parmi lesquelles la requête de jointure est une méthode courante. Cependant, dans les requêtes multi-tables, si aucun traitement n'est effectué, des données en double risquent de se produire. Cet article explique comment supprimer les données en double lors de l'exécution de requêtes de jointure dans ThinkPHP.

  1. Analyse des problèmes

Lors de l'exécution de requêtes liées à plusieurs tables, nous utilisons généralement le code suivant :

$model = M('table1');
$data = $model->join('table2 ON table1.id=table2.table1_id')
              ->field('table1.*, table2.*')
              ->select();

Dans le code ci-dessus, nous utilisons la méthode join pour effectuer des requêtes liées entre deux tables, puis utilisons le champ La méthode spécifie les champs à interroger.

Cependant, étant donné que les données des deux tables sont dupliquées, les données en double apparaîtront également dans les résultats de la requête. Par exemple, les résultats de notre requête peuvent être similaires à ce qui suit :

id   | name  | age   | table1_id | content
-----------------------------------------
1    | John  | 20    | 1         | ...
2    | Mary  | 22    | 2         | ...
3    | John  | 20    | 3         | ...
4    | Bruce | 25    | 1         | ...
5    | Mary  | 22    | 5         | ...

Vous pouvez voir que deux données sont dupliquées, à savoir les deux données avec les ID 1 et 3. En effet, elles sont toutes les deux identiques à ceux du tableau2. Les données sont liées.

  1. Déduplication

Afin de supprimer les données en double, nous pouvons utiliser le mot-clé DISTINCT dans MySQL, par exemple :

$model = M('table1');
$data = $model->distinct(true)
              ->join('table2 ON table1.id=table2.table1_id')
              ->field('table1.*, table2.*')
              ->select();

Dans le code ci-dessus, nous appelons la méthode distinct(true), qui convertira les résultats de la recherche Supprimer dupliquer les données pour obtenir les données non dupliquées souhaitées.

En parallèle, nous pouvons également utiliser la méthode groupe pour supprimer les doublons. Par exemple :

$model = M('table1');
$data = $model->join('table2 ON table1.id=table2.table1_id')
              ->group('table1.id')
              ->field('table1.*, table2.*')
              ->select();

Dans le code ci-dessus, nous appelons la méthode group('table1.id'), qui regroupera les résultats de la requête en fonction du champ id dans la table table1 pour obtenir des données uniques.

  1. Résumé

Cet article explique comment supprimer les doublons lors de l'exécution de requêtes de jointure dans ThinkPHP, notamment en utilisant des méthodes distinctes et de groupe. Ces méthodes sont très couramment utilisées, en particulier lors de l'exécution de requêtes complexes liées à plusieurs tables. Parallèlement, il faut également noter que l’utilisation de ces méthodes nécessite un certain temps et des ressources informatiques.

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