Ennek a leprogramozása hogyan lenne optimális?
Kicsit törtem a fejem, de nem jöttem rá semmi értelmes megoldásra.
Adott egy adatbázis, melybe be vannak táplálva egy fiktív lottó nyerőszámai.
n1[1-20], n2[1-20], n3[1-20], n4[1-20] és joker[1-100].
A Program 5 számot vár a felhasználótól, a fenti struktúra szerint, és kikeresné az adatbázisból hogy hány 1-2-3-4 találatos és Nyertes szelvénye lett volna a megadott számok alapján.
(Hasonlóképp mint itt: [link] )
Ha MySQL adatbázis, egy lehetséges megoldás:
1. Összefűzöd a nyerőszámokat egy mezőbe CONCAT() függvénnyel
2. Ebben a mezőben LIKE-al keresel
Például 1,7,6,4 számokkal:
Groupolod találatonként (ha n1 találat +1, n2 találat +1... kijön 0-1-2-3-4 közül valami.
Első mezőbe ugyanúgy kiírod hány találatosról van szó
Második mezőbe ugyan így, csak összeszámolva az egyezőeket.
Dehát... Dehát... Ennek semmi értelme.
Mi az, hogy a nyerőszámok vannak letárolva egy db-be? Az összesen 5 szám, nem? Erre minek db?
És mi az, hogy hány 0,1,2,... találata lenne?
5 számmal ezek közül pontosan egy lehet, nem?
pèlda
március: 1,3,9,15,21
április: 2,5,22,25,30
május: 1,9,25,41,50
júnus: 3,4,7,21,42
számaim: 1,3,21,30,42
1 találat: 2 db (április, május)
2 találat: 0 db
3 találat: 2 db (március, június)
gondolom valahogy így érti a kérdező.
na hát, szzerintem a feladatnak pont az a lényege, hogy te jöjj rá az optimális megoldásra. Mert magának a problémának a megoldása nem egy magy ördöngősség.
"Adott egy adatbázis, melybe be vannak táplálva egy fiktív lottó nyerőszámai.
n1[1-20], n2[1-20], n3[1-20], n4[1-20] és joker[1-100]."
1-től 20-ig lehetnek a számok és 4-es lottóról beszélünk? A joker meg 1-től 100-ig lehet?
A linkelt példában 5-ös lottó van jocker nélkül.
Milyen adatbázisról beszélünk, sql, noSql?
Milyen optimális megoldásra gondolsz? Hogy ne kelljen mindenképpen elejétől végig bejárni az adatbázist kereséskor?
> Hogyan lenne helyes #8?
Ugyan nem #8-as vagyok, de én is szerencsésebbnek tartanám, ha lenne egy tábla két mezővel az egyik a szelvény száma (vagy sorsolási dátum, vagy ilyesmi), a másik az egyik nyerőszám, esetleg még egy mező, hogy hányadik nyerőszám. Valahogy így:
CREATE TABLE huzasok (
huzas_azonosito INT NOT NULL,
sorszam INT NOT NUL,
szam INT NOT NULL,
PRIMARY KEY (huzas_azonosito, sorszam)
)
Pl. az ötös lottón legutóbb a 41, 54, 64, 81, 83 számokat húzták, ez öt sor lenne az adatbázisban:
202216, 1, 41
202216, 2, 54
202216, 3, 64
202216, 4, 81
202216, 4, 83
(A szelvény száma az évből és a hétből áll össze ebben a példában, ezt is lehet cizellálni, ha kell.)
Innen meg egyszerű:
SELECT huzas_azonosito, COUNT(szam) AS talalat
FROM huzasok
WHERE szam IN (p1,p2,p3,p4,p5)
GROUP BY huzas_azonosito
Ahol p1–p5 az az öt szám, amire kíváncsi vagy. Eredményül azokat a szelvényeket kapod, amiken volt legalább egy találat, a találatok számával.
Aztán ha a húzásokról egyéb információkat is kell, azt lehet külön táblában tárolni. Meg persze szanaszét lehet innentől optimalizálni, indexelni, stb…
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!