Topic: Sudėtingas SELECT

įrašai MySQL'e (jų išviso turėtų būti 300) pvz.:

Array(
'id' => 1,
'komanda_sveciuose' => 16,
'komanda_namuose' => 14,
'komanda_sveci_taskai' => 65,
'komanda_namie_taskai' => 78
),
Array(
'id' => 2,
'komanda_sveciuose' => 14,
'komanda_namuose' => 16,
'komanda_sveci_taskai' => 65,
'komanda_namie_taskai' => 78
)

Išviso yra 30 komandų.
Man reikia, kad išmestų 3 lenteles ir kiekvienoje iš tų lentelių bus po 10 komandų. Tais komandas turi išmesti pagal pergaliu/pralaimėjimo procentą. Jį apskaičiuoti galima pvz.:

(SUM(IF(`komanda_sveciuose` < `komanda_namuose`, 1, 0))+(SUM(IF(`komanda_sveciuose` < `komanda_namuose`, 0, 1)))/(SUM(IF(`komanda_sveciuose` < `komanda_namuose`, 1, 0)))) AS lyg

Be to komandos jau yra paskirstytos į kuria lentelę jos eina tai yra ar į pirmą ar į antrą ar į trečią. Pavyzdyje sudėliota iš eilės, o tikrovėje bus tikrai ne iš eilės.
pvz.:

<?php
$grupe[0] = 1;
$grupe[0] = 2;
$grupe[0] = 3;
$grupe[0] = 4;
$grupe[0] = 5;
$grupe[0] = 6;
$grupe[0] = 7;
$grupe[0] = 8;
$grupe[0] = 9;
$grupe[0] = 10;
$grupe[1] = 11;
$grupe[1] = 12;
$grupe[1] = 13;
$grupe[1] = 14;
$grupe[1] = 15;
$grupe[1] = 16;
$grupe[1] = 17;
$grupe[1] = 18;
$grupe[1] = 19;
$grupe[1] = 20;
$grupe[2] = 21;
$grupe[2] = 22;
$grupe[2] = 23;
$grupe[2] = 24;
$grupe[2] = 25;
$grupe[2] = 26;
$grupe[2] = 27;
$grupe[2] = 28;
$grupe[2] = 29;
$grupe[2] = 30;
?>

Man tai labai padėtų GROUP BY `komanda_namuose`, bet GROUP BY neužtenka tik namams jo reikia ir svečiams, o jeigu išeitų kaip nors juos abu sukišt į vieną GROUP BY tada būtų gerai... Nes dabar niekaip nesugalvoju kaip padaryt vieną užklausą vietoj dviejų ir plius dar kai dvi turi dar su PHP turi dirbt, kad vėl ir ten ir ten esančias komandas sugrupuot kaip tai padaro GROUP BY...
Kaip galvojat, nes aš nelabai turiu minčių...

Re: Sudėtingas SELECT

Na viską reikėtų pradėti nuo to, kad pateiktum duomenų schemas, nes dabar kažkaip keistai duomenis perteiki per PHP kintamuosius - nelabai aišku ar čia viskas saugoma vienoje lentelėje ar ar dvejuose, trijose.

Kita vertus tikriausiai viskas susives į 3 gana paprastas užklausas. Viską kelti į vieną užklausa nėra prasmės, nes tikriausiai puslapyje grupės atvaizduojamos bus atskirai.

Re: Sudėtingas SELECT

Ko šičia reikia tai viena lentelė.
Kam trijų užklausų jei imtum tuos pačius duomenis? Geriau jau daryt vieną užklausą visiems duomenims, nes jei darytum per MySQL'ą tai pasidarytų po WHERE sąlygų labai daug su OR kazkas=kazkas OR kazkas=kazkas ir tokių or būtų ~ 20-40, o tokiu didelio atskyrimo nereikia, su PHP tą galima atlikti dar ir greičiau, nes įdedi $masyvas[$k] ir viskas kaip per sviestą, nes šitoks masyvas greitas, o ne kažkokių OR pridėti ir tada gautųsi minimum 6 užklausos jei ne daugiau vietoj 2, nes aš dabar planuoju daryt su dviem užklausom ir dar su PHP tais dvi užklausų informacijas sudėti kur ji einasi sudedama. Beje aš pats galvojau daryt 3 užklausas, bet pamačiau, kad tai bevertis dalykas, nes kam daryt tris ir dar WHERE pridėti jei galima apsieiti be WHERE ir sumažėja kintamųjų for ir kitų ciklų...

Re: Sudėtingas SELECT

kik wrote:

Ko šičia reikia tai viena lentelė.
Kam trijų užklausų jei imtum tuos pačius duomenis? Geriau jau daryt vieną užklausą visiems duomenims, nes jei darytum per MySQL'ą tai pasidarytų po WHERE sąlygų labai daug su OR kazkas=kazkas OR kazkas=kazkas ir tokių or būtų ~ 20-40, o tokiu didelio atskyrimo nereikia, su PHP tą galima atlikti dar ir greičiau, nes įdedi $masyvas[$k] ir viskas kaip per sviestą, nes šitoks masyvas greitas, o ne kažkokių OR pridėti ir tada gautųsi minimum 6 užklausos jei ne daugiau vietoj 2, nes aš dabar planuoju daryt su dviem užklausom ir dar su PHP tais dvi užklausų informacijas sudėti kur ji einasi sudedama. Beje aš pats galvojau daryt 3 užklausas, bet pamačiau, kad tai bevertis dalykas, nes kam daryt tris ir dar WHERE pridėti jei galima apsieiti be WHERE ir sumažėja kintamųjų for ir kitų ciklų...

žodžiu, parodyk duomenų schemas..

5 (edited by kik 2007-03-05 11:19:18)

Re: Sudėtingas SELECT

šiaip tai tam masyve viskas kas reikalinga atvaizduota kas yra lentelėje, nu, bet tiek to parodysiu:

CREATE TABLE `stats2` (
  `id` smallint(5) NOT NULL auto_increment,
(daugiau info kuri bus nenaudojama)
  `komanda_sveciuose` smallint(3) NOT NULL default '0',
  `komanda_namuose` smallint(3) NOT NULL default '0',
  `komanda_sveci_taskai` smallint(3) NOT NULL default '0',
  `komanda_namie_taskai` smallint(3) NOT NULL default '0',
  `aktyvumas` int(1) NOT NULL default '0',
(daugiau info kuri bus nenaudojama)
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci;

Kaip žinai aš noriu padaryti komandų laimėjimų lentelę tai yra rezultatai lygiuojasi pagal laimėjimus/pralaimėjimus ;)

Re: Sudėtingas SELECT

O kur apsirašo ta mistinė "grupė"?

Re: Sudėtingas SELECT

Jau rodžiau. Va kur(šitai gali pamatyti pirmame mano pranešime):

<?php
$grupe[0] = 1;
$grupe[0] = 2;
$grupe[0] = 3;
$grupe[0] = 4;
$grupe[0] = 5;
$grupe[0] = 6;
$grupe[0] = 7;
$grupe[0] = 8;
$grupe[0] = 9;
$grupe[0] = 10;
$grupe[1] = 11;
$grupe[1] = 12;
$grupe[1] = 13;
$grupe[1] = 14;
$grupe[1] = 15;
$grupe[1] = 16;
$grupe[1] = 17;
$grupe[1] = 18;
$grupe[1] = 19;
$grupe[1] = 20;
$grupe[2] = 21;
$grupe[2] = 22;
$grupe[2] = 23;
$grupe[2] = 24;
$grupe[2] = 25;
$grupe[2] = 26;
$grupe[2] = 27;
$grupe[2] = 28;
$grupe[2] = 29;
$grupe[2] = 30;
?>

Re: Sudėtingas SELECT

Nu .. ;)

Man tai idomu, kaip ta grupė atrodo duomenų struktūroje ar toje pačioje lentelėje ar kitoje ;) Aš juk ne telepatas.

Ar tu esi matęs, kad kas nors pateikinėtu duomenų struktūrą taip kaip pateiki tu?

Re: Sudėtingas SELECT

Ta grupė yra tokia ir ji MySQL'e netalpinama! Ji yra php faile ir tu matai jo turinį :D Nors galėčiau laikyti ir duombazėje, bet tai mažai naudos pridėtų, nes dinamiką galiu padaryti ir su php failu, Vanilla (man labai patinkanti forumų sistema) dalį nustatymų taip pat laiko php faile tokių kaip prisijungimo prie MySQL'o, stiliaus ir t.t. Be to iš labai daug (visi kurie naudoja MySQL) kas bent dalį nustatymų laiko php faile ;)

Re: Sudėtingas SELECT

Tai jeigu pusę duomenų saugai duomenų bazėje, o kitą pusę - php faile, tai su SQL užklausom jų bendrai apdoroti juk ir neišeis. Su SQL'u gali tik suskaičiuoti tą vadinamą "pergalių/pralaimėjimų procentą", kurio algoritmą pats ir pateikei. O visą kitą - skirstyti į grupes jau turi atlikti su PHP.

11

Re: Sudėtingas SELECT

O gal žinai kaip vienoje lentelėje du stulpelius sugrupuoti su GROUP BY ar tai tiesiog labai sudėtinga ar neįmanoma? Nes tarkim jei taip sugrupuočiau `komanda_sveciuose` ir `komanda_namuose` tada iškart gaučiau vienos komandos laimėjimus/pralaimėjimus. Būtent to aš kūriau šitą temą... Būtent to aš nežinau ir norėčiau tai atlikti labiau su MySQL, nes jis būtent pateikia info, kurią turėtų apdoroti MySQL'as, o ne PHP kuris turi atvaizduoti.
Hmz... Vis tik vis dar įdomu ar tai įmanoma.
P.S. Viską dabar darau su PHP'u kuris turi sutvarkyti tai ką MySQL'o duoda (info), ir taip gaunasi nemažai for ir foreach ciklų.

Re: Sudėtingas SELECT

Taip: rašai dvi užklausas, jas sujungi su UNION ir turi rezultatą.