Jump to content
php.lv forumi

skaitam pēc kārtas (in a row)


anonīms

Recommended Posts

ar parasto while ej cauri visām komandas spēlēm

// SELECT speles WHERE km1 == komanda OR km2 == komanda

tad pārbaudi cik daudz spēles pēc kartas ir uzvarētas

if(uzvara)
{
$uzvaru_skaits_pec_kartas += 1;
}
else
{
$uzvaru_skaits_pec_kartas = 0;
}

if($uzvaru_skaits_pec_kartas > 2)
{
// ok 
}

 

man izkskatās ka labāk izdomāt citu "speles" tabulas struktūru, jo jo talāk jo trakāk

Link to comment
Share on other sites

Ja tiec pie insert/update skriptiem tabulai, izdari to tajos. Piemēram, ja uzvara, incrementējam fieldu, ja zaudējums, tad ierakstam nulli. Būs tev uzvarētās spēles pēc kārtas.

Ja netiec, tad būtu jārakstā proceduru, vai nu jātaisā šo iekš PHP.

Link to comment
Share on other sites

Var arī SQLā. Ja MySQLā būtu vēl kāds elegantāks risinājums kā ģenerēt numurus pēc kārtas, tad vispār nebūtu bēdas.

Un vēl - vai tiešām, tiešām ir tik grūti iedot create table skriptus un insert skriptus, lai tiem, kas mēģina nav tie jāsacer pašiem???????

 

OK tabula un dati:

mysql> create table games (id int, km1 int, km2 int, rez1 int, rez2 int);
Query OK, 0 rows affected (1.59 sec)

mysql> insert into games values (1, 1, 2, 4, 8), (2, 1, 2, 6, 3),
   -> (4, 1, 2, 4, 8), (5, 1, 2, 5, 3), (7, 2, 1, 3, 5);
Query OK, 5 rows affected (0.22 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM games ORDER BY id;
+------+------+------+------+------+
| id   | km1  | km2  | rez1 | rez2 |
+------+------+------+------+------+
|    1 |    1 |    2 |    4 |    8 |
|    2 |    1 |    2 |    6 |    3 |
|    4 |    1 |    2 |    4 |    8 |
|    5 |    1 |    2 |    5 |    3 |
|    7 |    2 |    1 |    3 |    5 |
+------+------+------+------+------+
5 rows in set (0.00 sec)

 

Vaicājums:

mysql> SET @row1 = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SET @row2 = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SET @search = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT id1, id2 FROM (
   ->   SELECT t1.id id1, t2.id id2,
   ->   CASE WHEN t1.km1 = @search AND t1.rez1 > t1.rez2 THEN 1
   ->        WHEN t1.km2 = @search AND t1.rez2 > t1.rez1 THEN 1
   ->        ELSE 0
   ->   END AS rez1,
   ->   CASE WHEN t2.km1 = @search AND t2.rez1 > t2.rez2 THEN 1
   ->        WHEN t2.km2 = @search AND t2.rez2 > t2.rez1 THEN 1
   ->        ELSE 0
   ->   END AS rez2
   ->   FROM (
   ->   SELECT @row1 := @row1 + 1 AS Row, t.*
   ->   FROM games t
   ->   WHERE km1 = @search OR km2 = @search
   ->   ORDER BY id) t1
   ->   INNER JOIN (
   ->   SELECT @row2 := @row2 + 1 AS Row, t.*
   ->   FROM games t
   ->   WHERE km1 = @search OR km2 = @search
   ->   ORDER BY id) t2
   ->   ON t1.row + 1 = t2.row) t
   -> WHERE rez1 = 1 AND rez2 = 1;
+------+------+
| id1  | id2  |
+------+------+
|    5 |    7 |
+------+------+
1 row in set (0.03 sec)

 

spēles 5 un 7 ir tās kurās vinne bijusi pēc kārtas.

Ja nesaproti, kā dabūja gala rezultātu, laid pa apakšselektiem :)

Ideja - vispirms sakārtojam tās spēles kuras piedalās attiecīgā @search definēta komanda pēc kārtas. Tad taisam self joinu lai dabūtu nākošo spēli. Tā kā idi var izkrist, noteikti ir vairāk nekā 2 komandas, utt tad nevar pa taisno joinot idus pieskaitot klāt 1, tāpēc ir tas numurs pēc kārtas. Tālāk jau ir vienķarši noskaidrojam vai pirmajā spēlē vinnēja @search komanda un noskaidrojam vai otrajā spēlē vinnēja @search komanda. Ja abās vinnēja, tad 2 pēc kārtas.

 

Gan jau ka uz lieliem datiem pasākums nebūs ātrs. Nesaku, ka šis ir vienīgais risinājums, kā to dabūt SQLā.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...