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
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 |