Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [PHP] [MySQL] Kuinka selviän mahdollisimman vähin SQL-kyselyin?

Petja [18.06.2011 20:06:25]

#

Olen toteuttamassa koululleni ATK-luokan varausjärjestelmää. Toteuttaminen ei sinänsä ole ongelma, mutta minun versiostani syntyisi 16-20 kyselyä tietokantaan/sivulataus. Miten voisin minimoida tämän yhteen tai maksimissaan kahteen kyselyyn? Itse koodia (PHP) en ole vielä kirjoittanut, mutta perusmatematiikalla arvioin, että kyselyjä tulisi tuolla minun versiollani aika paljon.

Opettaja voi siis varata joko pienen tai suuren ATK-luokan. Luokka voidaan varata joko puoleksi tunniksi (n. 40 min) tai koko tunniksi (75 min).

Grez [18.06.2011 20:14:59]

#

Valitettavasti kysymykseesi ei voi hirveän kattavasti vastata, koska et ole kertonut mitä nuo 16-20 kyselyä tietokantaan ovat.

Tai no tietty voisi sanoa että niputa kyselyt yhdeksi unionilla ja luovalla kenttien uudelleennimeämisellä. Tässä ratkaisutavassa ei kuitenkaan olisi mitään järkeä, eikä edes onnistuisi jos myöhemmät kyselyt käyttävät aikaisempien kyselyjen tietoja.

Sellaisen yleisen vinki voin toki antaa, että tallenna kirjautumisen yhteydessä istuntoon sellaiset käyttäjäkohtaiset tiedot, joita ei tarvitse ladata jokaisella sivulla.

The Alchemist [18.06.2011 22:56:29]

#

Ilmeisen tuttu tilanne...

Petja [19.06.2011 09:19:56]

#

Sanoinhan, ettei koodi ole vielä valmis, mutta nyt ...

Ehkä jos tästä kuvasta olisi apua:
http://petjatouru.com/kuvat/atk.png

Kuten kuvassa näette, pitäisi tarkistaa SQL-kyselyllä, onko luokka vapaana näkyvinä tunteina (1-4). Kyselyjä syntyisi ainakin 16. Jos luokka ei ole vapaana, lisättäisiin buttoniin disabled-atribuutti. Kyselyjen määrä nousisi 18, kun haluttaisiin vielä näyttää luokkien tila juuri nyt. Ja koska kyseessä on varausjärjestelmä, pitäisi toki sillä pystyä myös luokka varaamaankin. Siitäkin tulee ainakin yksi kysely.

Mika9 [19.06.2011 10:50:53]

#

Tällaisissa kysymyksissä kannattaisi kertoa mahdollisimman tarkkaan tietokannan ja kyselyiden rakenne.

Itse toteuttaisin homman taululla joka olisi esimerkiksi muodossa:

ID|PVM|alkuaika|loppuaika|luokka|varaaja

Tämän jälkeen katselunäkymään riittäisi yksi kysely tyyliin:

...WHERE PVM = CURRENT_DATE() ORDER BY alkuaika ASC

Jolla saadaan aikaiseksi helposti käsiteltävä array, jossa tiedot ovat aikajärjestyksessä.

Tulostaessa katsotaan alku- ja loppuajoista onko kyseiselle aikavälille varausta ja hoidetaan tulostaminen asiaan kuuluvalla tavalla.

Petja [19.06.2011 11:10:00]

#

Kiitos, yritän soveltaa tuon koodin tarpeideni mukaisesti.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta