Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

pret minim/maxim... problema la curs valutar [2] [rezolvat]
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Subiectul anterior :: Subiectul următor  
Autor Mesaj
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE

Trimis: Vin Aug 22, 2008 9:59 am    Titlul subiectului: pret minim/maxim... problema la curs valutar [2] [rezolvat]  

am facut alt thread pentru ca am schimbat baza de date iar problema s-a schimbat [fata de precedenta]

acum... am:

record
----------
id: 20
titlu: un titlu...
etc

pret
----------
id:1
pret:230
mon:eur
id_asoc:20

id:2
pret:290
mon:usd
id_asoc:20
etc

deci... am id-ul inregistrari pus ca si cheie straina in preturi.

eu fac o cautare

SELECT * FROM `record` WHERE `titlu`LIKE '%get_trimis_de_user%' AND.... [aici apare problema includerii pretului] pret_minim < PRET < pret_maxim

dau o bere jumate cui imi da o idee
*eu nu pot sa beau o bere intreaga deci, o sa dau si jumatate din a mea
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 620

Trimis: Vin Aug 22, 2008 10:26 am    Titlul subiectului:  

Vezi daca te ajuta.

Cod:
SELECT
  *
FROM `record`
INNER JOIN pret
  ON record.id = pret.id_asoc
WHERE `titlu`LIKE '%get_trimis_de_user%'
  AND (   IF(mon = 'eur', pret between $pret_minim_trimis_de_utilizator_si_convertit_in_euro_in_php and
                                        $pret_maxim_trimis_de_utilizator_si_convertit_in_euro_in_php, 0)
       OR IF(mon = 'usd', pret between $pret_minim_trimis_de_utilizator_si_convertit_in_dolari_in_php and
                                        $pret_maxim_trimis_de_utilizator_si_convertit_in_dolari_in_php, 0) )
Sus  
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Vin Aug 22, 2008 10:30 am    Titlul subiectului:  

Daca folosesti mysql 5, ai putea scapa relativ... usor?

Stii de instructiunea IF in select?

IF(conditie,raspuns pentru true,raspuns pentru false)

Asadar ai putea in WHERE sa faci ceva care sa verifice daca moneda e USD sau EURO

asadar

WHERE

....`pret_minim` < `pretul_tau_in_orice_moneda` * IF(`moneda` = 'usd',1.54,I) < `pret_maxim`....


Pe scurt, te folosesti de IF ca sa ajustezi pretul in functie de moneda

Astfel, valorile din IF sunt ajustatori de pret, echivaleaza pretul la o moneda unica.


Cred ca am fost destul de clar, dar nu sunt sigur. :)



EDIT://
Amenthes, ai fost cu putin mai rapid ca mine.
Dar pari a avea o metoda mai complexa de calcul, cere mai mult timp mi se pare.

In orice caz, vorbim aproape aceeasi limba :D


vectorialpx, vad un potential risc de securitate aici.

edit:// e interpretat ca link valid de voi.

adix:// la fel
lalala://
hack://
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 620

Trimis: Vin Aug 22, 2008 10:44 am    Titlul subiectului:  

adix a scris: Dar pari a avea o metoda mai complexa de calcul, cere mai mult timp mi se pare.

Cred ca asa e. Pare mai buna metoda ta, ce e mai urat la ea e faptul ca daca ai prea multe monede se umple IF-ul ala cam urat.

Cod:
pret_minim` < `pretul_tau_in_orice_moneda` * IF(`moneda` = 'usd', 1.54, IF(`moneda`='eur', 'paritate', IF(`moneda` = 'yen', 'alta paritate', 1))) < `pret_maxim`

Sau ma insel?

Oricum, in final conteaza sa il ajute pe vectorialpx.
Sus  
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Vin Aug 22, 2008 11:26 am    Titlul subiectului:  

Amenthes a scris: adix a scris: Dar pari a avea o metoda mai complexa de calcul, cere mai mult timp mi se pare.

Cred ca asa e. Pare mai buna metoda ta, ce e mai urat la ea e faptul ca daca ai prea multe monede se umple IF-ul ala cam urat.

Cod:
pret_minim` < `pretul_tau_in_orice_moneda` * IF(`moneda` = 'usd', 1.54, IF(`moneda`='eur', 'paritate', IF(`moneda` = 'yen', 'alta paritate', 1))) < `pret_maxim`

Sau ma insel?

Oricum, in final conteaza sa il ajute pe vectorialpx.


Nu te inseli, dar e mai rapid.
Si la un query asta e cheia.

In orice caz, nice job :)
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE

Trimis: Vin Aug 22, 2008 11:29 am    Titlul subiectului:  

plimbandu-ma prin lift [am fost sa-mi iau de mancare] mi-a venit o alta idee. Pe mine ma intereseaza foarte mult rapiditatea la script-ul asta pentru ca nu gandesc problema la nivel de 10 inregistrari.

variantele voastre sunt ok dar necesita destule pentru o singura comparatie... daca as avea 2-5000 de inregistrari cu pretul p-acolo ar fi destul de nasol.

ce m-am gandit - fac interogare in tabela cu preturi si fac un
if(pret_in_lei_dat_de_user > pret_in_lei_din_tabela) array_push(un_id_intr-un_array_final)

apoi, in sql-ul cel mare, fac un `id` IN ( valorile din array-ul_final)

acum... cred eu ca
interogare_pret + "IN (5000_de_id-uri)" dureaza mai putin decat
un ID trecut prin 5000 de if-uri * numarul de monede... cred eu

si, mai e o chestie... numarul de monede va fi variabil [e intr-un array] ... bine, si la sql-ul vostru poate fi creat dar... pare mai complex.

multe multumiri pentru idei si, mai ales pentru timp...
oricum, m-ati inspirat cu schimbarea structurii tabelului :)

adix, ceva:// e interpretat ca fiind protocolul "ceva" si, reg_exp-ul de la phpBB il ia ca fiind link... asta ca sa nu compare cu http, https, ftp, etc... pentru ca daca apar noi protocoale sa nu modifice script-ul :)

multam inca o data!
Sus  
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Vin Aug 22, 2008 11:58 am    Titlul subiectului:  

vectorialpx a scris: plimbandu-ma prin lift [am fost sa-mi iau de mancare] mi-a venit o alta idee. Pe mine ma intereseaza foarte mult rapiditatea la script-ul asta pentru ca nu gandesc problema la nivel de 10 inregistrari.

variantele voastre sunt ok dar necesita destule pentru o singura comparatie... daca as avea 2-5000 de inregistrari cu pretul p-acolo ar fi destul de nasol.

ce m-am gandit - fac interogare in tabela cu preturi si fac un
if(pret_in_lei_dat_de_user > pret_in_lei_din_tabela) array_push(un_id_intr-un_array_final)

apoi, in sql-ul cel mare, fac un `id` IN ( valorile din array-ul_final)

acum... cred eu ca
interogare_pret + "IN (5000_de_id-uri)" dureaza mai putin decat
un ID trecut prin 5000 de if-uri * numarul de monede... cred eu

si, mai e o chestie... numarul de monede va fi variabil [e intr-un array] ... bine, si la sql-ul vostru poate fi creat dar... pare mai complex.

multe multumiri pentru idei si, mai ales pentru timp...
oricum, m-ati inspirat cu schimbarea structurii tabelului :)

adix, ceva:// e interpretat ca fiind protocolul "ceva" si, reg_exp-ul de la phpBB il ia ca fiind link... asta ca sa nu compare cu http, https, ftp, etc... pentru ca daca apar noi protocoale sa nu modifice script-ul :)

multam inca o data!


Glad to help man.
Ba chiar mi-a venit o pofta de a ma implica in activitatile forumului, mama mama.

Am sa igor activisti gen mandriva si alte smecherii, si am sa ma concentrez pe ce e nevoie.

Legat de protocoale, ymsgr://im?+&msg=sunt-cel-mai-tare-la-spart-siteuri
Si sunt cunoscute exploatari de genul asta.....
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Vin Aug 22, 2008 12:34 pm    Titlul subiectului:  

in oracle as face asa ceva:
Cod: CREATE TABLE valute(moneda VARCHAR2(3),valoare_in_ron number);
CREATE TABLE carti (id_carte NUMBER,titlu VARCHAR2(100));
CREATE TABLE pret (id_pret NUMBER,pret NUMBER,moneda VARCHAR2(3),id_carte NUMBER);

INSERT INTO valute VALUES ('EUR',3.56);
INSERT INTO valute values('USD',2.95);
INSERT INTO valute values('RON',1);

INSERT INTO carti values(1,'Programare PHP');
INSERT INTO carti values(2,'Programare C++');

INSERT INTO pret values(101,13,'EUR',1);
INSERT INTO pret values(102,18,'USD',2);


SELECT c.*,p.*,v.*,v.valoare_in_ron*p.pret pret_in_ron_calculat FROM carti c,pret p,valute v
WHERE c.id_carte=p.id_carte AND Upper(c.titlu) LIKE '%PROGRAMARE%'
AND p.moneda=v.moneda
AND v.valoare_in_ron*p.pret between pretul_minim_in_php_transformat_in_ron
AND pretul_maxim_in_php_transformat_in_ron
si cred ca e varianta cea mai simpla ...
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Vin Aug 22, 2008 12:58 pm    Titlul subiectului:  

floorin a scris: in oracle as face asa ceva:[...]
si cred ca e varianta cea mai simpla ... Din pacate problema se refera la MySQL (de aceea e si postata in sectiunea corespunzatoare). Please stay on topic.
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Vin Aug 22, 2008 1:06 pm    Titlul subiectului:  

ai testat codul meu in mysql si nu merge?... e prea "standard", cred ca merge...
si pana una alta, braistorming'ul e o metoda valida, daca as fi vorbit despre pescarusi sau fotbal poate as fi fost off-topic, deci... fii te rog on topic.
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Vin Aug 22, 2008 2:34 pm    Titlul subiectului:  

Ei uite ca l-am testat si nu merge. Tipul 'number' nu exista in mysql.

[offtopic]
Sa mor daca nu as tranti cu beginnerii astia in stanga si in dreapta daca as fi moderator! Nicicum nu-i bine! Daca te iei de ei ca pun intrebari penale, esti prea rau, daca ii trimiti la manual esti ingamfat, daca le atragi atentia in mod cumsecade ca dau un raspuns din oracle la o problema de MySQL iti spun sa 'fii on topic'. Era mai bine daca ii spuneam 'bai boule, asta e sectiunea MySQL, posteaza dracu la 'Alte baze de date' solutiile tale de Oracle'? Sa stiu si eu cum sa raspund, ca vad ca nicicum nu e bine!
[/offtopic]
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 3014
Locație: țopăi pe tasta DELETE

Trimis: Vin Aug 22, 2008 2:35 pm    Titlul subiectului:  

heloooo!!

floorin, nu stiu.. n-am incercat varianta ta dar am rezolvat problema intr-un mod propriu. Ce m-a incurcat cel mai tare a fost faptul ca sunt prea multe date variabile... dar, e ok... am rezolvat.

oricum, tu ai folosit 3 tabele si, nu m-ar ajuta asta pentru ca eu am facut deja structura pe 2. casa regandesc structura pentru 3 tabele trebuia sa refac jumatate de alpicatie si... imi bagam picioru.

10x oricum!

mihaitha... trebuie sa fi mai calm :)
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  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community