Re: ordre

From: Wilk <wilk-ml(at)flibuste(dot)net>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: ordre
Date: 2005-03-04 11:54:44
Message-ID: 87r7iv1v97.fsf@chat.blakie.riol
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

"Masse Jacques" <jacques(dot)masse(at)bordeaux(dot)cemagref(dot)fr> writes:

> Je ne cerne pas bien le probleme ...
> On n'utilise pratiquement jamais l'ordre "interne" d'une table (en ayant par exemple recours aux OID), on place des index : cle primaire et index sur les champs qui vont etre utilisés comme critere de classement. Faire "monter" ou "descendre" une ligne n'a de sens que pour un index donné et consiste seulement en une modification de cet index.
> L'imortant est donc de gérer ces champs, dans la table ou dans des tables reliées, pour représenter les différents classements qu'on va utiliser lors de la recherche des données. Une modification de l'ordre se fait par une nouvelle utilisation d'un index dans une requete, une fonction ou un trigger. On peut également procéder à la création d'un champ calculé dans une vue et uti:iser ce champ comme critere.

Je ne parle pas du tout de l'ordre interne...

ex:

entetefacture:
id_entete(serial) nom prenom ...
1 toto lito
2 titi liti
...

lignefacture:
id_ligne(serial) ref_facture ordre article qte ...
1 1 1 ar1 5
2 1 2 ar2 6
3 1 3 ar3 5
4 2 1 b1 5
5 2 2 b2 6
6 2 3 b3 7
...

j'ai donc deux factures avec 3 lignes chacune
la première contient 3 lignes avec les articles ar1 ar2 et ar3 dans
l'ordre.

Si je veux éditer les lignes ma facture je fait
SELECT * FROM lignefacture WHERE ref_facture=1 ORDER BY ordre

pour ajouter une ligne à la première facture
SELECT MAX(ordre) FROM lignefacture WHERE ref_facture=1

le résultat me donne la valeur de ordre pour la prochaine ligne (donc 4)

et enfin, si je veux remonter la ligne ar3 je cherche la ligne
précédente

SELECT id_ligne FROM lignefacture WHERE ref_facture=1 AND ordre<3 ORDER
BY ordre

UPDATE lignefacture SET ordre=2 WHERE id_ligne=3
UPDATE lignefacture SET ordre=3 WHERE id_ligne=2

Et donc, toutes ses manips se font au niveau du programme, ma question
était de savoir si ce serait plus simple avec des fonctions PG. C'est un
cas assez courrant il me semble...

--
William - http://flibuste.net

In response to

  • Re: ordre at 2005-03-04 11:14:06 from Masse Jacques

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Masse Jacques 2005-03-04 13:20:18 Re: ordre
Previous Message Masse Jacques 2005-03-04 11:14:06 Re: ordre