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

Requêtes PostgreSQL Discussion :

Optimiser / clarifier / améliorer grosse requête -> csv


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Optimiser / clarifier / améliorer grosse requête -> csv
    Bonjour,

    Tout d'abord, je viens juste, aujourd'hui, de créer cette requête. Je ne connais pas bien les jointures, elle vous paraîtra certainement horrible, c'est aussi pour ça que je suis là.

    La base est celle fournie par Odoo. J'utilise psql car je ne peux pas obtenir le résultat que je souhaite pas l'export dans le client. Mon but est de sortir un fichier csv qui ressemble à ça:
    Nom : Capture du 2015-10-08 17:20:08.png
Affichages : 201
Taille : 15,2 Ko

    Je ne sais pas si c'est faisable. Je veux dire, laisser les cases redondantes vides (id,name). Au pire c'est pas grave, regex est là pour ça...

    Les tables impliquées:
    Nom : Capture du 2015-10-08 17:36:04.png
Affichages : 215
Taille : 21,1 Ko

    Ma requête pour l'instant:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    SELECT 
    	  ( SELECT * FROM ref('product.template', t.id) ) AS id,
    	  t.name AS name, 
    	  ( SELECT * FROM ref('product.product', p.id) ) AS prod_id,
    	  p.default_code AS default_code, 
    	  v.name AS p_value,
    	  null AS line_id, null AS attribute, null AS _value
     
        FROM product_template AS t
    FULL JOIN product_product AS p
        ON t.id = p.product_tmpl_id
    FULL JOIN product_attribute_value_product_product_rel AS vp
        ON p.id = vp.prod_id
    FULL JOIN product_attribute_value AS v
        ON vp.att_id = v.id
     
    UNION
     
    SELECT
        id, name, 
        null AS prod_id, null AS default_code, null AS p_value, 
        line_id, attribute, string_agg(val, ',') AS _value
    FROM (
      SELECT 
        ( SELECT * FROM ref('product.template', t.id) ) AS id,
        t.name AS name, 
        ( SELECT * FROM ref('product.attribute.line', l.id) ) AS line_id,
        a.name AS attribute, 
        v.name AS val
          FROM product_template AS t
      FULL JOIN product_attribute_line AS l
        ON t.id = l.product_tmpl_id
      FULL JOIN product_attribute AS a
        ON a.id = l.attribute_id
      FULL JOIN product_attribute_line_product_attribute_value_rel AS lv
        ON l.id = lv.line_id
      FULL JOIN product_attribute_value AS v
        ON lv.val_id = v.id 
    ) AS s
    GROUP BY id, name, line_id, attribute
    ORDER BY name, default_code;
    Comme vous pouvez le voir, les jointures sont faites un peu au hasard (LEFT, RIGHT, INNER, FULL ?) et le UNION combiné aux 'null AS <field>' me sort plus d'enregistrements qu'escompté.
    Je m'attends à ce que le nombre de lignes soit égal au nombre de lignes dans la table product_product ajouté au nombre de lignes dans la table product_attribute_line.

    Je m'excuse si la requête est très bordélique, je me suis remis au SQL hier.

    Merci de votre lecture, et de votre aide éventuelle.

    PS: je connais la command pour sortir un CSV, je parle de CSV pour justifier la grosse requête avec string_agg, ...
    Images attachées Images attachées  
    Images attachées Images attachées

Discussions similaires

  1. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  2. Réponses: 6
    Dernier message: 21/06/2005, 15h06
  3. Réponses: 8
    Dernier message: 14/01/2005, 09h06
  4. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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