
W czym rzecz:
Tworzę stronę dla pewnej ligi piłkarskiej (http://www.alpn.prv.pl - jakby ktoś był ciekawy). I przyszło do stworzenia tabeli fer-play. Czyli zliczyc zolte i czerwone kartki kazdego zawodnika, pogrupowac ich wedlug druzyn, i obliczyc punkty dla kazdej druzyny.
Mam dwie tabele, jak stoi ponizej.
Kod
CREATE TABLE alpn_druzyny (
id_teamu int(10) unsigned NOT NULL auto_increment,
nazwa varchar(255) NOT NULL default '',
rozegrane int(11) NOT NULL default '0',
liga set('I','II') NOT NULL default '',
bramki_strzelone int(10) unsigned NOT NULL default '0',
bramki_stracone int(10) unsigned NOT NULL default '0',
wygrane int(11) NOT NULL default '0',
remisy int(11) NOT NULL default '0',
przegrane int(11) NOT NULL default '0',
punkty int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id_teamu)
) TYPE=MyISAM;
CREATE TABLE alpn_zawodnicy (
id_zawodnika int(10) unsigned NOT NULL auto_increment,
id_teamu int(10) unsigned NOT NULL default '0',
nazwisko varchar(255) NOT NULL default '',
pozycja set('Bramkarz','Obrońca','Pomocnik','Napastnik') NOT NULL default '',
bramki int(11) NOT NULL default '0',
bramki_samobojcze int(11) NOT NULL default '0',
zolte int(10) unsigned NOT NULL default '0',
czerwone int(10) unsigned NOT NULL default '0',
pauzuje_od int(11) NOT NULL default '0',
pauzuje_do int(11) NOT NULL default '0',
PRIMARY KEY (id_zawodnika)
) TYPE=MyISAM;
id_teamu int(10) unsigned NOT NULL auto_increment,
nazwa varchar(255) NOT NULL default '',
rozegrane int(11) NOT NULL default '0',
liga set('I','II') NOT NULL default '',
bramki_strzelone int(10) unsigned NOT NULL default '0',
bramki_stracone int(10) unsigned NOT NULL default '0',
wygrane int(11) NOT NULL default '0',
remisy int(11) NOT NULL default '0',
przegrane int(11) NOT NULL default '0',
punkty int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id_teamu)
) TYPE=MyISAM;
CREATE TABLE alpn_zawodnicy (
id_zawodnika int(10) unsigned NOT NULL auto_increment,
id_teamu int(10) unsigned NOT NULL default '0',
nazwisko varchar(255) NOT NULL default '',
pozycja set('Bramkarz','Obrońca','Pomocnik','Napastnik') NOT NULL default '',
bramki int(11) NOT NULL default '0',
bramki_samobojcze int(11) NOT NULL default '0',
zolte int(10) unsigned NOT NULL default '0',
czerwone int(10) unsigned NOT NULL default '0',
pauzuje_od int(11) NOT NULL default '0',
pauzuje_do int(11) NOT NULL default '0',
PRIMARY KEY (id_zawodnika)
) TYPE=MyISAM;
Po dluższym myśleniu, wykombinowałem coś takiego:
Kod
SELECT SUM(alpn_zawodnicy.zolte) AS k_zolte, SUM(alpn_zawodnicy.czerwone) AS k_czerwone, (SUM(alpn_zawodnicy.zolte)*3+SUM(alpn_zawodnicy.czerwone)*6) AS punkty, alpn_druzyny.liga, alpn_druzyny.nazwa
FROM alpn_zawodnicy, alpn_druzyny
WHERE liga='I' AND alpn_zawodnicy.id_teamu=alpn_druzyny.id_teamu
GROUP BY alpn_zawodnicy.id_teamu
ORDER BY punkty DESC
FROM alpn_zawodnicy, alpn_druzyny
WHERE liga='I' AND alpn_zawodnicy.id_teamu=alpn_druzyny.id_teamu
GROUP BY alpn_zawodnicy.id_teamu
ORDER BY punkty DESC
I teraz tak. wyniki wygladaja bardzo dobrze, aż sam się dziwię, ale mam pytanie - czy te zapytanie jest OK, czy mozna je w jakis sposob zoptymalizowac? Bo napisac można wszystko, ale nie wszystko musi działąć optymalnie..
I o to własnie pytam - czy to jest optymalne?
A pytam Was dlatego, że strona ALPN to jest pierwszy projekt, w którym stosuję aż tak (lame...) skomplikowane zapytania. I szczerze powiedziawszy jesli sie okaże że te bazgroły powyżej są ok. bedę mogł przepisać kilka innych selectów, które robiłem "aby były"
