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

MySQL Discussion :

Trouver des données avec valeurs dans une autre table


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Trouver des données avec valeurs dans une autre table
    Bonjour,

    Mon problème est le suivant :

    J'ai 2 tables acv_project et acv_product.

    Mes projets sont associés à des utilisateurs via la clé green_user_id.
    Chaque projet a un product dans la table acv_product.
    Chaque product est lié à un projet via la clé project_id et a une masse.

    Je cherche à retrouver en partant de green_user_id tous les projets de l'utilisateur en question qui ont un produit avec une masse différente de 0.

    Trouver tous les projets de l'utilisateur je sais faire. Trouver tous les produits ayant une masse différente de 0 aussi.

    Mais là je vois pas comment faire.

    Et dans l'idéal il faudrait que je le fasse avec Doctrine parce que c'est dans le cadre d'un projet Symfony.

    Si quelqu'un sait comment faire ça ?

    Merci

    Je vous mets les structures de mes 2 tables project et product.Nom : TableProduct.png
Affichages : 189
Taille : 102,6 KoNom : TableProject.png
Affichages : 175
Taille : 186,1 Ko

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select green_user_id , project_id , prod.weight 
    from acv_project p 
    join acv_product prod on prod.project_id = p.id
    where prod.weight <> 0

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Merci, quelqu'un saurait-il comment je fais comprendre cette requete SQL à Doctrine maintenant ?

  4. #4
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Je suis désolé mais j'ai beau lire toutes les docs que tu m'as données, je n'y comprends absolument rien.

    Ca propose notamment d'écrire ça comme ça :

    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
    public function findOneByIdJoinedToCategory($id)
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT p, c FROM AppBundle:Product p
                JOIN p.category c
                WHERE p.id = :id'
            )->setParameter('id', $id);
     
        try {
            return $query->getSingleResult();
        } catch (\Doctrine\ORM\NoResultException $e) {
            return null;
        }
    }
    Mais dans cet exemple, je vois pas comment adapter à mon cas précis

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Finalement résolu en passant mon SQL brut et en mettant bindValue pour passer mon userId en paramètre comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $rawSql = "select p.name, p.id from acv_project p join acv_product prod on prod.project_id = p.id where prod.weight <> 0 and p.green_user_id = :userId ORDER BY p.name";
     
            $stmt = $em->getConnection()->prepare($rawSql);
            $stmt->bindValue("userId", $userId);
            $stmt->execute();
     
            $projects = $stmt->fetchAll();

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Du coup, mon problème est partiellement résolu.

    En fait avec le code précédent j'arrive à remplir un select qui contient ce que je veux.

    Seulement maintenant j'aimerais remplir un champ texte qui s'autocomplète et pour ça j'ai besoin de retourner un tableau qui contient tous les noms des projets trouvés.

    Du coup, je fais la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $rawSql = "select p.name from acv_project p join acv_product prod on prod.project_id = p.id where prod.weight <> 0 and p.green_user_id = :userId and p.name LIKE :name ORDER BY p.name";
     
            $stmt = $em->getConnection()->prepare($rawSql);
            $stmt->bindValue("userId", $userId);
            $stmt->bindValue("name", '%'.$term.'%');
            $stmt->execute();
     
            $projects = $stmt->fetchAll();
    Seulement cette requete me renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"name":"ACV AI CAD","0":"ACV AI CAD"},{"name":"ACV ampoule incandescence","0":"ACV ampoule incandescence"},{"name":"ACV ampoule incandescence","0":"ACV ampoule incandescence"},{"name":"ACV ampoule incandescence","0":"ACV ampoule incandescence"},{"name":"ACV ampoule incandescence","0":"ACV ampoule incandescence"},{"name":"ACV d'une ampoule fluocompacte","0":"ACV d'une ampoule fluocompacte"},{"name":"ACV d'une ampoule fluocompacte","0":"ACV d'une ampoule fluocompacte"},{"name":"ACV d'une ampoule fluocompacte C Arnould","0":"ACV d'une ampoule fluocompacte C Arnould"},{"name":"ACV d\u2019une ampoule \u00e0 incandescence","0":"ACV d\u2019une ampoule \u00e0 incandescence"},{"name":"ACV d\u2019une ampoule \u00e0 incandescence","0":"ACV d\u2019une ampoule \u00e0 incandescence"},{"name":"ACV d\u2019une ampoule \u00e0 incandescence C Arnould","0":"ACV d\u2019une ampoule \u00e0 incandescence C Arnould"},{"name":"ACV Eolienne TP6","0":"ACV Eolienne TP6"},{"name":"ACV s\u00e8che-cheveux","0":"ACV s\u00e8che-cheveux"},{"name":"ACV1 \u00e9olienne","0":"ACV1 \u00e9olienne"},{"name":"ACV1 \u00e9olienne d\u00e9taill\u00e9e","0":"ACV1 \u00e9olienne d\u00e9taill\u00e9e"},{"name":"ACV1 \u00e9olienne d\u00e9taill\u00e9e \u00e9cocon\u00e7ue","0":"ACV1 \u00e9olienne d\u00e9taill\u00e9e \u00e9cocon\u00e7ue"},{"name":"ACV_Rasoir_Venus_Initial","0":"ACV_Rasoir_Venus_Initial"},{"name":"ACV_Rasoir_Venus_Reconception - avec 50% de revalorisation","0":"ACV_Rasoir_Venus_Reconception - avec 50% de revalorisation"}]
    Et moi, j'aimerais qu'elle me renvoie juste un tableau qui contient les différents noms, et pas des {"name":"ACV AI CAD","0":"ACV AI CAD"}. Aussi, si elle pouvait interpréter les accents correctement et me renvoyer "ACV sèche-cheveux" et non "ACV s\u00e8che-cheveux".

    Si quelqu'un a une idée de comment faire ?

    Je précise que je suis déjà en train de lire la doc de Doctrine mais je ne trouve pas

Discussions similaires

  1. Mettre des données avec pourcentage dans une table
    Par issakha_dione dans le forum Débutez
    Réponses: 1
    Dernier message: 08/06/2019, 19h22
  2. [AC-2010] Trouver une valeur dans une autre table - multi-colonnes
    Par Jojosyl dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2017, 09h02
  3. Trouver une valeur dans une autre table
    Par steve15 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/11/2016, 09h34
  4. Réponses: 15
    Dernier message: 21/06/2016, 17h57
  5. Réponses: 4
    Dernier message: 28/03/2014, 16h32

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