Bosna i Hercegovina



#1 19.03.2017-19:47
dex Offline
Super Moderator
Registrovan/a od: 23.02.2012-19:59
Komentari: 605


Ocjena: Ocjena:100 Subject: Loto kombinacile u MySQL-u
Avko je zapoceo temu na http://icentar.ba/...e=1#p28123

Pa rekoh da vidim kako je moguce naci kombinacije.

Napravio tabelu Brojevi sa jednim poljem Broj, popunio je brojevima od 1 do 45
Prvo probao sa

CREATE VIEW Kombinacije AS
SELECT Broj as t1, Broj as t2, Broj as t3, Broj as t4, Broj as t5, Broj as t6
FROM Brojevi
WHERE t1<t2 AND t2<t3 AND t3<t4 AND t4<t5 AND t5<t6

Ne prolazi ni u Access-u ni u MySQL-u. Zakljucak:

NE KORISTITI ALIASE ZA POLJA U WHERE, HAVING I JOIN KLAUZULI!

Ne znam, mozda u nekom slucaju i moze da prodje, ali u vecini nece

Onda probao
DownloadIzvorni kod (SQL):
  1. SELECT t1.broj, t2.broj, t3.broj, t4.broj, t5.broj, t6.broj
  2. FROM brojevi AS t1, brojevi AS t2, brojevi AS t3, brojevi AS t4, brojevi AS t5, brojevi AS t6
  3. WHERE t1.broj<t2.broj AND t2.broj<t3.broj AND t3.broj<t4.broj AND t4.broj<t5.broj AND t5.broj<t6.broj
U Accesu prolazi, dok MySQL ne dozvoljava iste nazive polja, vec sam im morao dati aliase
DownloadIzvorni kod (SQL):
  1. SELECT t1.broj AS a, t2.broj AS b, t3.broj AS c, t4.broj AS d, t5.broj AS e, t6.broj AS f
  2. FROM brojevi AS t1, brojevi AS t2, brojevi AS t3, brojevi AS t4, brojevi AS t5, brojevi AS t6
  3. WHERE t1.broj<t2.broj AND t2.broj<t3.broj AND t3.broj<t4.broj AND t4.broj<t5.broj AND t5.broj<t6.broj
Onda sam pozvao

SELECT COUNT(*) FROM Kombinacije

i dobio broj mogucih kombinacija.

Accessu je trebalo oko minut (po slobodnoj proceni), a MySQL-u 8.86 sec iz command line.

Onda rekoh da vidim da li brze radi sa JOIN-ima

DownloadIzvorni kod (SQL):
  1. CREATE VIEW `kombinacije2` AS
  2. SELECT t1.broj AS a, t2.broj AS b, t3.broj AS c, t4.broj AS d, t5.broj AS e, t6.broj AS f
  3. FROM ((((brojevi AS t1
  4. INNER JOIN brojevi AS t2 ON t1.broj < t2.broj)
  5. INNER JOIN brojevi AS t3 ON t2.broj < t3.broj)
  6. INNER JOIN brojevi AS t4 ON t3.broj < t4.broj)
  7. INNER JOIN brojevi AS t5 ON t4.broj < t5.broj)
  8. INNER JOIN brojevi AS t6 ON t5.broj < t6.broj;

coun uradio za 8.84 sec, neznatna razlika.
Probao vise puta, uvek je razlika bila na drugoj decimali u korist inner joina

I tako nadjosmo broj mogucih kombinacija. 8 145 060

Za nalazenje broja povoljnih treba izbrisati podatke iz tabele Brojevi i popuniti je brojevima iz opsega koji zelimo da bude izvucen, Na primer samo parni, samo neparni samo koji pocinju sa 1 i sta vam vec padne napamet…
Verovatnocu racunamo kao broj povoljnih/ 8 145 060
Ovaj komentar je mijenjan 1 puta. zadnja izmjena 19.03.2017-19:52 od strane dex. ↑  ↓

Stranice (1): 1


All times are GMT +01:00. Current time: 10.12.2018-13:54.