Comunitatea PHP Romania
MightyDeals

Prima pagină Baze de date MySQL Uniune mysql - problema ordonare rezultate

Uniune mysql - problema ordonare rezultate

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Mesaj Mie Apr 04, 2012 10:18 am
Dalen PHPRomania Supporter

Mesaje: 6
Salutare si bine v-am gasit!

Sunt nou-nout aici, iar in ale PHP-ului si MySQL-ului mai am idee dar nu sunt prea bun.

Am o problema cu ordonarea unor rezultate din baza de date in situatia in care selectez din doua tabele si compar rezultatele.
Daca exista semnul de egalitate intre valori(tabel1.val1=tabel2.val2) pot adauga ORDER BY; in schimb daca am ceva de genul tabel1.val1>=tabel2.val2 interogarea nu mai lucreaza, in schimb GROUP BY este OK.

Multumesc anticipat,

Doru

Mesaj Mie Apr 04, 2012 12:35 pm
hadyh Average Member

Mesaje: 118
poti pune si tu query-ul aici ?

Mesaj Mie Apr 04, 2012 1:31 pm
Dalen PHPRomania Supporter

Mesaje: 6
hadyh scrie:
poti pune si tu query-ul aici ?


Desigur

$query = mysql_query("SELECT * FROM tabel1,tabel2 WHERE tabel1.val>=tabel2.val1 ORDER BY tabel2.val1 DESC LIMIT 0,10 ");

Mesaj Mie Apr 04, 2012 4:03 pm
hadyh Average Member

Mesaje: 118
si in ce sens nu mai lucreaza interogarea sau ce eroare iti returneaza ca la mine functioneaza ...

Mesaj Joi Apr 05, 2012 6:03 am
Dalen PHPRomania Supporter

Mesaje: 6
hadyh scrie:
si in ce sens nu mai lucreaza interogarea sau ce eroare iti returneaza ca la mine functioneaza ...


Eroarea este
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in....


si daca sar peste mysql_num_rows()

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in......

Mesaj Joi Apr 05, 2012 7:37 am
hadyh Average Member

Mesaje: 118
ok deci nu ti se executa query-ul.

ori inainte sa faci query-ul faci un echo $query si-l rulezi direct in programul tau de sql ( poate ai chiar phpmyadmin ) ori unde faci tu query-ul fa :

mysql_query($query) or die(mysql_error());

Mesaj Vin Apr 06, 2012 7:52 am
Dalen PHPRomania Supporter

Mesaje: 6
hadyh scrie:
ok deci nu ti se executa query-ul.

ori inainte sa faci query-ul faci un echo $query si-l rulezi direct in programul tau de sql ( poate ai chiar phpmyadmin ) ori unde faci tu query-ul fa :

mysql_query($query) or die(mysql_error());


Da, acum e clar cat de cat.

Incorrect key file for table '/var/mysqltmp/#sql_6642_0.MYI'; try to repair it

Mesaj Vin Apr 06, 2012 8:49 am
hadyh Average Member

Mesaje: 118
de aici gasesti suport pe mysqldev. iti sugerez si stackoverflow pentru suport cand mai cauti :)


spor

Mesaj Vin Apr 06, 2012 8:53 am
Dalen PHPRomania Supporter

Mesaje: 6
hadyh scrie:
de aici gasesti suport pe mysqldev. iti sugerez si stackoverflow pentru suport cand mai cauti :)


spor


OK. Multumesc pentru ajutor.

M-am lamurit cum sta treaba si oricum nu e bine chair daca rezolv ordonarea respectiva. Interogarea dureaza prea mult (peste 15 secunde).
Treaba este ca daca extrag fara ORDER BY dureaza 0.2-0.3 secunde iar cu ORDER BY....imi creste barba.

Trebuie sa gasesc o alta solutie pentru extragere din DB avand in vedere ca tabele sunt foarte umflate si trebuie sa extrag din 4 tabele.

Poate revin cu o structura a celor 4 tabele si daca esti dispus, poate gasim o solutie optima.

Inca o data, multumesc.

Mesaj Vin Apr 06, 2012 9:02 am
hadyh Average Member

Mesaje: 118
desigur, poti sa revii i love to be challenged :)

Mesaj Dum Apr 08, 2012 2:25 pm
Dalen PHPRomania Supporter

Mesaje: 6
hadyh scrie:
desigur, poti sa revii i love to be challenged :)


Am refacut interogarea; m-am folosit de INNER JOIN si acum sunt multumit de rezultate; scriptul este executat in 0.05-0.1 secunde, ceea ce e foarte bine avand in vedere marimea tabelelor. In acelasi timp am optimizat putin tabelele; unele coloane erau stabilite aiurea, fara nici un sens(exemplu: coloana care nu necesita decat 0 sau 1, era int(11)).

Interogarea actuala arata acum ca ceva de felul
SELECT * FROM tabel INNER JOIN tabel ON tabel.coloana=tabe1.coloana....etc AND ceva NOT IN(1,2,4,6,7,8) AND altceva NOT IN(2,3,6,7,8) ORDER BY ....LIMIT


Pentru a da rezultate mai bune valorile dintre NOT IN() le-am extras inaintea acestora stabilind o variabila pentru fiecare in parte, in interogare fiind cele doua variabile, adica
$variabila1 = 'AND ceva NOT IN(valori)';



SELECT * FROM tabel INNER JOIN tabel ON tabel.coloana=tabe1.coloana....etc $variabila1 $variabila2 ORDER BY ....LIMIT




P.S. Am uitat sa specific ca site-ul are deja vechime, baza de date este cea de la inceput si incepuse sa apara problemele pentru ca asa a fost facut scriptul.

Oricum, multumesc mult pentru ajutor!

Mesaj Joi Mai 24, 2012 10:57 am
hbunny PHPRomania Supporter

Mesaje: 5
Localitate: Bucuresti
Un "order by" nu ar trebui sa iti incetineasca atat de mult un select, am senzatia mai degraba ca nu e indexata tabela.
Ai pus un index pe coloana dupa care vrei sa faci ordonarea?

Mesaj Dum Apr 14, 2013 12:55 am
Google Bot New Member

Mesaje: 1

Înapoi la MySQL

Copyright © 2001-2013 PHP Romania Gazduire web | Haine online | Gazduire web | Campanii SMS | Gazduire Claus Web | Inregistrare Domenii | Anunturi | Jocuri cu bile
Furnizat de phpBB® Forum Software © phpBB Group
Translation/Traducere: phpBB România
Powered by Simplis