Jump to content
php.lv forumi

ORDER BY


Igors

Recommended Posts

Situacija ir tada: Notiek spele un tiek veiktas prognozes, speles beigas tiek izvadita tabula ar prognozem. Ka var sarindot prognozes no vistuvaakaas rezultatam?

Luudzu paliidziet uzraxtiit kveriju.

 

SELECT vards, prognoze FROM dalibnieki, speles

WHERE speles_rezultats='$result'

ORDER BY ?????????? DESC LIMIT 10

Link to comment
Share on other sites

Situacija ir tada: Notiek spele un tiek veiktas prognozes, speles beigas tiek izvadita tabula ar prognozem. Ka var sarindot prognozes no vistuvaakaas rezultatam?

Luudzu paliidziet uzraxtiit kveriju.

 

SELECT vards, prognoze FROM dalibnieki, speles

WHERE speles_rezultats='$result'

ORDER BY ?????????? DESC LIMIT 10

Varbuut ir kaads cits variants kaa sarindot?

Link to comment
Share on other sites

kas ir vistuvākais rezultāts? kas par spēli? un ko īsti satur lauki?

Piemrream rezultaats ir 4:2

 

prognozes 4:1, 4:2, 1:1, 6:2, 0:1

Vajadzeetu, lai sakaarto dilstoshaa seciibaa njemot veeraa rezultaatu: piem: 4:2, 4:1, 6:2, 1:1, 0:1

Link to comment
Share on other sites

Piemrream rezultaats ir 4:2

 

prognozes 4:1, 4:2, 1:1, 6:2, 0:1

Vajadzeetu, lai sakaarto dilstoshaa seciibaa njemot veeraa rezultaatu: piem: 4:2, 4:1, 6:2, 1:1, 0:1

 

Algoritmu jau nu tā kā būtu forši tomēr definēt, kaut vai vārdiem jo arī šis piemērs nebūt nav acīmredzams. Piemēram, kāda prognoze ir labāka 4:1 vai 4:3? un 5:2 vai 3:2? un 2:2 vai 3:1?

 

Bet nu piņemot, ka Tu spēj sadalīt rezultātu divos laukos un prognozi divos laukos, tad kaut kas apmēram tāds:

Rezultāts a:b

Prognoze c:d

 

ORDER BY abs(a-c) + abs(b-d), kur ABS ir absolūtā vērtība, paskaties pats MySQL dokos kāda funkcija tam atbilst MySQLā. Pēc tam atkarībā no atbildēm uz maniem jautājumiem vari mēģināt kārtot kā nākošās izteiksmes.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Algoritmu jau nu tā kā būtu forši tomēr definēt, kaut vai vārdiem jo arī šis piemērs nebūt nav acīmredzams. Piemēram, kāda prognoze ir labāka 4:1 vai 4:3? un 5:2 vai 3:2? un 2:2 vai 3:1?

 

Bet nu piņemot, ka Tu spēj sadalīt rezultātu divos laukos un prognozi divos laukos, tad kaut kas apmēram tāds:

Rezultāts a:b

Prognoze c:d

 

ORDER BY abs(a-c) + abs(b-d), kur ABS ir absolūtā vērtība, paskaties pats MySQL dokos kāda funkcija tam atbilst MySQLā. Pēc tam atkarībā no atbildēm uz maniem jautājumiem vari mēģināt kārtot kā nākošās izteiksmes.

 

Gints Plivna

http://datubazes.wordpress.com

Sadaliit diezvai sanaax, jo veertiibas tiek paarvietotas masiivaa un tabulaas glabaajas kaa viena veertiiba, vienaa laukaa. Vajag izveidot kveriju, lai funkcija ORDER BY izpildaas njemot veeraa $result.

Link to comment
Share on other sites

a tu SADALI! Jo tā kā tu gribi nesanāks iekš mysql, vismaz cilvēcīgā veidā un efektīvi.

Jādefinē arī veiksmīgākais variants

 

rezultāts: 2:2

varianti: 2:0 vai 1:3 ... abiem būs +2 nobīde, bet vienā variantā ir uzminēts cipars. kurš būs tuvāks? ... vispār iesaku glabāt atsevišķā laukā prognozes rezultātu (nobīde), lai nav katru reii jārēķina, un pie rezultāta uzzināšanas updeitot viņu (tas jādara vienreiz tikai)

Link to comment
Share on other sites

Jautaajums ir taads: Vai ORDER BY var sakaartot veertiibas peec kaada mainiigaa? Vai tikai peec alfabeeta vai cipariem no 1 liidz n. Vai var sakaartot peec piem. 4:1 dilstoshaa seciibaa laukus, kur ieraxtiitaas veertiibas laukaa ir n:m, kur 'n' un 'm' mainaas no 1 liidz 99?

Link to comment
Share on other sites

Jautaajums ir taads: Vai ORDER BY var sakaartot veertiibas peec kaada mainiigaa? Vai tikai peec alfabeeta vai cipariem no 1 liidz n. Vai var sakaartot peec piem. 4:1 dilstoshaa seciibaa laukus, kur ieraxtiitaas veertiibas laukaa ir n:m, kur 'n' un 'm' mainaas no 1 liidz 99?

Var sakārtot pēc izteiksmes tā kā es tev to rādīju, kur izteiksmes rezultāts vai nu būs skaitlis un tad kārtos kā skaitļus (1, 2, ..., 10, 11) vai arī rezultāts būs simboliska vērtība un tad kārtos kā virkni (1, 10, 11, 2).

 

Tā izteiksme pēc būtības arī būs šķiet tas mainīgais, par ko tu raksti.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

nuuu nelielas darbības ar stringiem un sadalīsi. Līdz kolam pirmā vērtība, pēc kola otrā vērtība. Oraclē es Tev uzrakstītu, MySQLā tas man prasa skatīšanos manuālī, tieši tāpat, kā es pieņemu, ir jādara Tev :)

 

ja es rezultatu ievietotu masiivaa array(2:3) un izvadiitu to pa vajadziigajiem simboliem attieciigi array[0], kur izvads buutu '2' un array[2] buutu '3' un to pashu izdarot ar prognozi

un tad ievietotu kverijaa

 

Rezultāts a:b

Prognoze c:d

 

SELECT vards, prognoze

FROM dalibnieki

ORDER BY abs(array[0]-array2[0]) + abs(array[2]-array2[2])

 

Vai tas vareetu nostraadaat? Un ja var tad kaa lai noraadu izvadu dilstoshaa seciibaa?

Link to comment
Share on other sites

Var sakārtot pēc izteiksmes tā kā es tev to rādīju, kur izteiksmes rezultāts vai nu būs skaitlis un tad kārtos kā skaitļus (1, 2, ..., 10, 11) vai arī rezultāts būs simboliska vērtība un tad kārtos kā virkni (1, 10, 11, 2).

 

Tā izteiksme pēc būtības arī būs šķiet tas mainīgais, par ko tu raksti.

 

Gints Plivna

http://datubazes.wordpress.com

Kas te ir nepareizi? Jo mainoties rezultaatam sakaartojums izvadee nemainaas.

 

 

<?php

 

$rez = array($result);

$prog = array($_POST[prognoze]);

 

 

$dalibn = mysql_query("SELECT d_vards, d_prognoze

FROM dalibnieki

WHERE klases_nr=$_SESSION[grupa]

ORDER BY abs('$rez[0][0]'-'$prog[0][0]') + abs('$rez[0][2]'-'$prog[0][2]')

DESC LIMIT 10");

$izvads == array($dalibn, MYSQL_ASSOC);

while($izvads = mysql_fetch_array($dalibn))

{

echo $izvads['d_vards'] . " " . $izvads['d_uzvards'] . " " . $izvads['d_prognoze'];

echo "<br />";

}

 

?>

Link to comment
Share on other sites

Man kaut kā īsti nav skaidrs ko tu tur centies izdarīt php kombinācijā ar MySQL :), bet te ir demonstrācija.

mysql> create table dalibnieki (
->   vards varchar(10),
->   rezultats varchar(10));
Query OK, 0 rows affected (0.20 sec)
mysql> insert into dalibnieki values ('a', '1:1');
Query OK, 1 row affected (0.03 sec)

mysql> insert into dalibnieki values ('b', '4:2');
Query OK, 1 row affected (0.03 sec)

mysql> insert into dalibnieki values ('c', '3:2');
Query OK, 1 row affected (0.03 sec)

mysql> insert into dalibnieki values ('d', '4:1');
Query OK, 1 row affected (0.03 sec)

mysql> insert into dalibnieki values ('e', '6:2');
Query OK, 1 row affected (0.01 sec)

 

Tātad pieņemam, ka rezultāts ir 4:2 un to kaut kā Tu ieselektē no kaut kurienes citurienes, Tev droši vien būs tabula (vai mainīgais php, whatever), man būs vienkārši konstante '4:2'

mysql> select vards, rezultats
-> from dalibnieki
-> order by
->	abs(substr(rezultats, 1, instr(rezultats, ':') -1) -
->	  substr('4:2', 1, instr('4:2', ':') -1)) +
->	abs(substr(rezultats, instr(rezultats, ':') + 1) -
->		substr('4:2', instr('4:2', ':') + 1));
+-------+-----------+
| vards | rezultats |
+-------+-----------+
| b	 | 4:2	   |
| c	 | 3:2	   |
| d	 | 4:1	   |
| e	 | 6:2	   |
| a	 | 1:1	   |
+-------+-----------+
5 rows in set (0.00 sec)

 

Jā un kā jau iepriekš teica, pēc spēles rezultāta uzzināšanas to izteiksmes rezultātu, kas pie ORDER BY rēķinās katrai rindai, ir vērts izrēķināt tikai vienreiz un ielikt atsevišķā kolonā, pēc kuras tad veikt kārtošanu, lai katru reizi attēlojot datus izteiksme nav jārēķina no jauna.

 

 

Gints Plivna

http://datubazes.wordpress.com

Edited by Gints Plivna
Link to comment
Share on other sites

×
×
  • Create New...