[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux-team] [SQL] Problme avec apostrophes et mise a jour



Pour les apostrophes, tu peux inserer un \ devant les ' dans la chaine qui contient le nom du produit.

e.g.

xy'z

devient

xy\'z

'wala.


Pour l'autre probleme, un solution simple et pas (trop) cochone:

Ajoute un champ "revision" a la table. Champ qui est incremente de 1 a chaque mise a jour (i.e. un fois par mois dans ton cas). A chaque fois que tu update OU ajoute, fait un "insert" SQL (jamais d' "update" SQL).

=> certains produits seront en double. Faut elager avec:


delete from produits where ID in (select ID, revision from produits p1, produits p2 where p1.ID=p2.ID and p1.revision<p2.revision) and revision< $REVISION

Ou $REVISION est la revision actuelle de la table.

J'ai suppose que l'identifant (code) du produit etait ID...


Accessoirement, tu peux travailler avec une revision binaire et mettre les updates/nouveautes dans la table avec un niveau de revision de 1. Apres l'elagage, tu refais passer tous le niveaux de revision a 0:

update produits set revision=0 where revision=1

Et 'wala aussi.


Perso, je garderais a jour une cache des produits  en memoire histoire d'accelerer le tout. En fait, mettre un index numerique sur le produit et garder un cache de l'index.

Comme ca, tu peux faire des "update" SQL  OU des "insert" SQL en ne choisissant la methode selon la cache et plus selon un query SQL mortellement lent.

Mais ca depend de la machine et de la taille de la table. Faut deja une grosse table pour foirer la machine.

Et puis ca va faire hurler des gens, je sais.

	fred.



Tony MASSE wrote:
> 
> Bonjour,
> 
> Je bosse sur un programme qui me met a jour une base de donnee via SQL.
> L'operation se deroule comme suit :
>  - il lit dans un fichier texte la nouvelle "base" (suite de lignes)
> produit que donne un fournisseur,
>  - il pond une requete SQL et met a jour la vraie base de donnee.
> 
> Le probleme, c'est que :
>  - de nouveaux articles peuvent arriver
>  - le prix d'article existant deja peuvent changer
>  - des articles peuvent ne plus faire partie du catalogue fournisseur (mais
> il faut les garder dans la base pour pouvoir imprimer les vieilles factures)
> 
> Les solutions respectives aux problemes :
>  - insert into Produit.......
>  - update Produit .......
>  - ne rien faire pour l'instant
> 
> Les problemes (respectifs) des solutions !! :
>  - ne met pas a jour un produit deja present
>  - ne rajoute pas un nouveau produit
> 
> Donc si vous avez une solution aux deux derniers problemes de solutions de
> problemes !!! Et bien faites m'en part.
> 
> Sinon, toujours en SQL, mais dans une autre categorie, la designation de
> certains article comporte une apostrophe ('). Mais l'apostrophe est le
> separateur (l'encadreur) des valeurs alphanumeriques. Donc pour l'instant
> je me cantonne a changer toutes les ' en ". Mais ca ne peut pas durer comme
> ca apres la periode de developpement.
> 
> La encore : Solution -> j'suis preneur !
> 
> Pour info un (petit) extrait du fichier d'origine :
> 
> ACEA20    RECHARGE ACETYLENE REF ACEA20 DG    248,00
> ACEA30    RECHARGE ACETYLENE REF ACEA30 DG    334,00
> ACEA34    RECHARGE ACETYLENE REF ACEA34 DG    363,00
> ACEA40    RECHARGE ACETYLENE REF ACEA40 DG    363,00
> ACEA60    RECHARGE ACETYLENE REF ACEA60 DG    546,00
> ACEA70    RECHARGE ACETYLENE REF ACEA70 DG    637,00
> ARGB05    RECHARGE ARGON REF ARGB05     DG    292,00
> ARGB20    RECHARGE ARGON REF ARGB20     DG    498,00
> 
> Il y a pres de 13000 lignes comme ca dans le fichier texte.
> 
> Pour info la solution actuelle, qui plante au bout de quelques
> enregistrements (250), fait ceci :
>  - select * from produit;
>  - combien d'enregistrement resultant ?
>    - si 1 ou plus :
>       - update produit.....
>    - sinon
>       - insert into produit....
> 
> Et en plus cette manip prend un temps dingue... Je suis pret a aller
> jusqu'a la procedure stockee s'il le faut, mais il faut que ca marche de
> facon sur et certaine. Et pas a la vitesse d'un escargot, meme si il faudra
> faire cette operation que tous les mois.
> 
> A+
>  Yo
> 
> /----------------------------/
> /         M. MASSE           /
> /     masse@meon-com.fr      /
> /   Mobile 06 60 53 39 94    /
> /     Fax 06 61 66 00 14     /
> /     Meon Communication     /
> /   Comores - Anjouan 88     /
> /      521, ch du Puy        /
> /      06600 ANTIBES         /
> /         FRANCE             /
> /----------------------------/
> ---------
> Visit the Linux Supertore Online: http://www.redcorp.com !
> If you want to be deleted from the list, send a mail to
> majordomo@rtfm.be with "unsubscribe linux-team" in the body.
---------
Visit the Linux Supertore Online: http://www.redcorp.com !
If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.