IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Suppression Doublon Requête MySQL ou LINQ


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Par défaut Suppression Doublon Requête MySQL ou LINQ
    Bonjour à tous,

    Dans une application, j'utilise une base de données MySQL.
    J'essaie de programmer une requête du type "moteur de recherche".
    En effet, dans un champs, je saisi une chaîne de caractère (peu importe que ça forme un mot ou nom). Cette chaîne de caractère est un nom d'ingrédient.
    Cette chaîne de caractère est alors comparé à tous les ingrédients de la base.

    • Si l'ingrédient de la table de la base de données contient la chaîne de caractères, je récupère l'ID de l'ingrédient.
      A ce stade nous avons donc une liste d'ID d'ingrédient (IDingredient) distinct.


    • Ensuite, je fais parcourir une second table en recherchant les ID recette (IDrecipe) qui contienne l'IDingredient précedemment obtenu.
      Nous avons donc une liste d'IDrecipe distinct.


    • Enfin, je fais parcourir une troisième table en recherchant les infos des colonnes pour chaque IDrecipe.
      J'ai donc une liste d'objet "RecipeDisplayed" distinct.


    Chaque requête indépendante retourne bien le résultat souhaité.

    Lorsque je passe dans le code C#, je cascade des "foreach" de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    private void displayListSource(string ingredientSelection)
            {
                RecipeListSource = new ObservableCollection<RecipeDisplayed>();
     
                foreach (var item_0 in RecipeDisplayedProvider.selectList_IDingredient_WithSpecificNameIngredient(ingredientSelection))  // foreach_1
                {
                    foreach (var item_1 in RecipeDisplayedProvider.selectList_IDrecipe_WithIDingredient(item_0)) // foreach_2
                    {
                        foreach (var item_2 in RecipeDisplayedProvider.selectList_recipe_WithIDrecipe(item_1)) // foreach_3
                        {
                            RecipeListSource.Add(new RecipeDisplayed
                            {
                                recipeDisplayedID = item_2.recipeDisplayedID,
                                recipeDisplayedPicture = item_2.recipeDisplayedPicture,
                                recipeDisplayedName = item_2.recipeDisplayedName,
                                recipeDisplayedNumberPart = item_2.recipeDisplayedNumberPart,
                                recipeDisplayedNumberDuration = item_2.recipeDisplayedNumberDuration,
                                recipeDisplayedNumberDescription = item_2.recipeDisplayedNumberDescription,
                            });
     
                            //TODO : Suppression Doublons en fonction du Nom recette
                            //var distinctItems = RecipeListSource.GroupBy(x => x.recipeDisplayedName).Select(y => y.First());
                        }
                    }
                }
            }
    Lors de l'exécution du script, je me retrouve avec plusieurs objets qui peuvent être identique.

    Pourquoi ?
    Prenons un exemple.
    Nom : HomeManager_1.PNG
Affichages : 309
Taille : 21,5 Ko
    Je souhaite rechercher l'ingrédient "o" (je voulais rechercher "oeuf", mais erreur de frappe admettons).
    La première requête retourne la liste distincte suivante :
    Nom : HomeManager_2.PNG
Affichages : 321
Taille : 25,4 Ko
    (J'ai ajouté le "Name" afin de bien voir que chaque ingrédient possède la chaîne de caractère "o")

    Le script va exécuter le "foreach_3" pour chaque cas du "foreach_2" qui a sont tour va s'exécuter pour chaque cas du "foreach_1" ce qui est le fonctionnement normal en lisant le code.

    Seulement ça me crée le problème suivant.

    Pour un "Risotto au saumon" par exemple, il faut du "Riz pour risotto", du "saumon fumé" et du "fromage allégé".
    Ces trois ingrédients possèdent la chaîne de caractère "o". Le programme va donc créer trois objets "Risotto".

    Nom : HomeManager_3.PNG
Affichages : 299
Taille : 148,7 Ko

    J'ai tenté de faire une requête LINQ sur la liste finale. Pour le moment sans succès.

    Auriez-vous des éléments de réponses ?

    PS : Complétement hors sujet, la technologie MySQL en local est instantanée. Lorsque je bascule ma base sur un serveur, j'ai entre 2 et 3 secondes de temps de réponses pour l'exécution des requêtes.
    Je pense que de ce fait l'utilisation des fonctions synchrones va être primordiale, mais connaissez vous des solutions plus rapides ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    lu en diagonale
    en théorie vaut mieux laisser le moteur sql traiter ca, il a a des chances d'être plus performant que c#

    en assez lisible il y a ca :
    (avec des alias de table)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT tableRecette.Id, tableRecette.nom, tableRecette.tempsPreparation, contenuRecette.Id, contenuRecette.Nom, contenuRecette.Quantité -- ...
     
    FROM tableRecette
      INNER JOIN tableIngredient contenuRecette ON contenuRecette.IdRecette = tableRecette.Id
     
    WHERE tableRecette.Id IN (SELECT contient.IdRecette FROM tableIngredient contient WHERE contient.nom like '%o%' GROUP BY contient.IdRecette)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème requête suppression doublons
    Par stephane.julien dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/08/2009, 09h07
  2. [MySQL] Suppression d'enregistrements MySQL abusive, sans requête associée
    Par IGalaxy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/03/2009, 19h49
  3. Suppression doublons requête SQL
    Par dimferte dans le forum SQL
    Réponses: 6
    Dernier message: 02/12/2008, 10h02
  4. Réponses: 1
    Dernier message: 02/01/2008, 13h28
  5. [MySQL] Problème de syntaxe dans suppression doublons
    Par fred23195 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/04/2006, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo