 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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 |
|
| |
|