php.lv forumi: ORDER BY - php.lv forumi

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

ORDER BY sarindot datu izvadi pec mainigas vertibas

#1 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 18:02

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

#2 User is offline   Delfins 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 3,880
  • Joined: 2003.02.18

Posted 2008.09.16 18:42

kas ir vistuvākais rezultāts? kas par spēli? un ko īsti satur lauki?
MSSQL Certified
MBS Axapta Certified
--
[url="http://delfins.id.lv"]http://delfins.id.lv[/url]
.... ....... _ o
... ... .. _\ \>
.... ....(_)/(_)

#3 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 18:44

View PostIgors, on 16.09.2008 19:02, said:

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?

#4 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 18:47

View PostDelfins, on 16.09.2008 19:42, said:

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

#5 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2008.09.16 19:06

View PostIgors, on 16.09.2008 19:47, said:

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

#6 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 19:29

View PostGints Plivna, on 16.09.2008 20:06, said:

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.

#7 User is offline   Delfins 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 3,880
  • Joined: 2003.02.18

Posted 2008.09.16 19:58

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)
MSSQL Certified
MBS Axapta Certified
--
[url="http://delfins.id.lv"]http://delfins.id.lv[/url]
.... ....... _ o
... ... .. _\ \>
.... ....(_)/(_)

#8 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 20:02

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?

#9 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2008.09.16 20:05

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 :)

Gints Plivna
http://datubazes.wordpress.com

#10 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2008.09.16 20:13

View PostIgors, on 16.09.2008 21:02, said:

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

#11 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 20:17

View PostGints Plivna, on 16.09.2008 21:05, said:

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?

#12 User is offline   Igors 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 7
  • Joined: 2008.09.16

Posted 2008.09.16 21:03

View PostGints Plivna, on 16.09.2008 21:13, said:

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 />";
}

?>

#13 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2008.09.16 22:20

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

This post has been edited by Gints Plivna: 2008.09.16 22:23


#14 User is offline   Delfins 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 3,880
  • Joined: 2003.02.18

Posted 2008.09.17 00:00

tur jau tas joks, ka ja glabā ats. kolonnā, var ļaut visu izr''ekināt php pēc sava vēl gudrākā algoritma. Piefiksēt beigās tikai float tipa skaitli pēc kā kārtot.
MSSQL Certified
MBS Axapta Certified
--
[url="http://delfins.id.lv"]http://delfins.id.lv[/url]
.... ....... _ o
... ... .. _\ \>
.... ....(_)/(_)

#15 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2008.09.17 09:53

View PostDelfins, on 17.09.2008 01:00, said:

var ļaut visu izr''ekināt php pēc sava vēl gudrākā algoritma.


arī fakts.

Gints Plivna
http://datubazes.wordpress.com

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic