| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Joi Aug 21, 2008 3:45 pm Titlul subiectului: pret minim/maxim... problema la curs valutar |
|
|
am un form de cautare unde clientul poate scrie pretul minim si pretul maxim intre care sa se incadreze.
am tabelul cu inregistrari
- id
- nume
- ....
- pret - 23,43,49,234
si tabelul cu preturi
- id [contine inregistrarile 23, 43, 49, 234 etc]
- suma
- moneda
eu fac un select `tabel`.campurile_mele WHERE am_niste_clauze
ca sa pot scoate niste inregistrari concrete. Problema apare in momentul in care trebuie sa selectez preturile in functie de cursul valutar. Nea' user-ul poate sa caute pret minim 200E si pret maxim 100LEI si, eu trebuie sa calculez care e pretul minim [transformat intro moneda] si cel maxim [in aceeasi moneda comuna] introdus de el si sa le compar cu preturile din baza de date [in moneda comuna, evident]
idei?..
daca nu ati inteles ideea, mai explic..
am o solutie dar e foarte nasoala... [selectez preturile - ca asta nu e greu - si fac un sir lung de id-uri, despartite cu virgula... apoi verific daca sunt IN lista cu inregistrari. Problema apare cand am 2000 de preturi... va fi al dracu de lent]. |
|
| Sus |
|
Quber
Data înscrierii: 27/Iun/2006
Mesaje: 807
Locație: localhost
|
| Trimis: Joi Aug 21, 2008 3:59 pm Titlul subiectului: |
|
|
| O ideie ar fi sa transformi toate preturile in o moneta unica, adica in "lei" sau in "$" cind selectezi, inserezi in baza de date.. cred ca asta ar fi metoda cea mai buna! |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Joi Aug 21, 2008 4:34 pm Titlul subiectului: |
|
|
pai asta am zis si eu.. :) ca trebuie sa transform intr-o moneda comuna
problema mea nu e una de insert ci una de select si apare cand fac select la alte monede.
teoretic... ar fi ceva de genul
select * FROM `tabel` WHERE
`pret`<suma_minima_in_moneda_pretului AND
`pret`>suma_maxima_in_moneda_pretului
pentru ca fiecare pret are moneda lui... asta e problema |
|
| Sus |
|
adix
Data înscrierii: 02/Oct/2007
Mesaje: 123
|
| Trimis: Joi Aug 21, 2008 4:39 pm Titlul subiectului: |
|
|
Singura ta solutie este sa te folosesti de proceduri stocate.
http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html |
|
| Sus |
|
Amenthes
Data înscrierii: 12/Dec/2005
Mesaje: 620
|
| Trimis: Joi Aug 21, 2008 4:55 pm Titlul subiectului: |
|
|
@vectorialpx, cateva intrebari ca sa ma lamuresc si eu.
1. Campul pret e de fapt un string de numere despartite prin virgula?
2. Campul id din tabelul de preturi e de tot un string de numere despartite prin virgula?
3. Tu lasi utilizatorul sa selecteze moneda in care introduce preturile minim si maxim? |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Joi Aug 21, 2008 5:15 pm Titlul subiectului: |
|
|
1. Campul pret de la fiecare inregistrare da... e un string
2. Campul id din tabeleul de preturi e unic
3. da.. din pacate :)
iti dau un exemplu
tabel_records
-------------------------
inregistrarea cu id 3
titlu: o inregistrare varchar
descriere: o desriere long text
pret:1,5,18
tabel_preturi
-------------------------
id:1
pret:300
moneda:eur
id:5
pret:200
moneda:usd
id:18
pret:200
moneda:lei
*preturile se pot si repeta in tabela de preturi, pentru ca sunt asociate la randul lor userilor si... ma rog. Daca un user sterge un pret, e pretul lui si atat.
Capitolul asta cu Stored Procedures arata bine... nu stiu ce sa zic |
|
| Sus |
|
dechim
Data înscrierii: 10/Mai/2005
Mesaje: 656
Locație: Drobeta Turnu Severin
|
| Trimis: Joi Aug 21, 2008 5:54 pm Titlul subiectului: |
|
|
Inca doua precizari te rog :
- user-ii care introduc preturile si o fac intr-o anumita moneda vor sa vanda produsul neaparat in acea moneda ?
- user-ul care cauta si introduce preturile min si max vrea sa cumpere ceea ce se gaseste in moneda indicata de el ?
Daca raspunzi cu "da" la amandoua :
* pentru $min si $max introduse in aceeasi moneda
... WHERE moneda=moneda_min_max AND (pret BETWEEN $min AND $max)
* daca introduce $min intr-o moneda si $max in alta :
- se transforma $min1 = $curs1*$min in moneda lui $max
- se transforma $max1 = $curs2*$max in moneda lui $min
Se realizeaza selectul :
SELECT ... WHERE (moneda = $moneda_max AND pret BETWEEN $min1 and $max) OR
(moneda = $moneda_min AND pret BETWEEN $min and $max1) |
|
| Sus |
|
adix
Data înscrierii: 02/Oct/2007
Mesaje: 123
|
| Trimis: Joi Aug 21, 2008 6:00 pm Titlul subiectului: |
|
|
vectorialpx a scris:
Capitolul asta cu Stored Procedures arata bine... nu stiu ce sa zic
Ideea este ca ai tabela proiectata gresit.
Asadar trebuie sa faci o procedura stocata ce parseaza automat campul in discutir, face convertirea singura la ce moneda iti trebuie tie si proceseaza rezultatele asa cum ai tu nevoie.
Din cate vad, alta abordare nu ai.
De fapt ai putea sa regandesti baza de date un pic. :) |
|
| Sus |
|
vectorialpx
Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE
|
| Trimis: Vin Aug 22, 2008 8:57 am Titlul subiectului: |
|
|
dechim, lucrurile sunt mult mai complicate de atat... pentru ca la mine sunt variabile monedele (monezile, whatever) si in baza de date si in input [ce introduce user-ul..]
asa ca... o sa regandesc problema
Citat: Ideea este ca ai tabela proiectata gresit.
da... la concluzia asta am ajuns si eu... deci o sa pun record-ul ca si cheie straina in pret... asa ar fi mai simplu.
multam pentru timp! |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |