Hei,
Kuten useammalle varmaan jo tiedossa niin olen tehnyt työvuoronvaraus ohjelmaa.. olen saanut täältä paljon apua ja varaaminen on toiminut hyvin, yritys on ollut erittäin tyytyväinen jne.
----------------------------------------------------------------
Nyt olen kuitenkin kohdannut mitä oudoimman ongelman eli.. kun listaan Tapahtumat
Tapahtuma 1
Tapahtuma 2
Tapahtuma 3
..niin nähtävästi tässä tulee joku kumma raja vastaan. SQL-lauseessa ei ole limittiä. En todellakaan ymmärrä mistä kyse? Eli en pysty lisäämään kuin yhteensä 35 tapahtumaa. Tämän jälkeen tapahtuma ei näy. Ainoastaan viimeisin luotu tapahtuma.
- Mistä tällainen voi johtua?
$sql_lauseke = "SELECT Varaus.Tapahtuma_Id, COUNT(Varaus.Tapahtuma_Id), Tapahtuma.tStatus, Tapahtuma.T_Id, Tapahtuma.tNimi, Tapahtuma.tVuosi, Tapahtuma.tKuukausi, Tapahtuma.tPaiva, Tapahtuma.tViikonpaiva, Tapahtuma.tTarve, Tapahtuma.tAlkaa, Tapahtuma.tLoppuu, Tapahtuma.tSijainti FROM Varaus RIGHT JOIN Tapahtuma ON Varaus.Tapahtuma_Id = Tapahtuma.T_Id WHERE Tapahtuma.tStatus = 'Tapahtumat' GROUP BY Varaus.Tapahtuma_Id ORDER BY tVuosi, tKuukausi, tPaiva, tNimi";
SQL-lause toimii, mutta tapahtumien määrä on rajoitettu, huoh..
Siis etkö saa lisättyä kantaan yli 35 riviä, vai luettua kannasta yli 35 riviä?
Ensin tarkistaisin mitä tapahtuu kun lisäät kantaan (tuleeko kantaan uudet rivit)
jos taas kantaan rivit tulee, mutta vika on lukiessa, tarkistaisin objektit joihon luet nuo tapahtumat (eli näkyykö kaikki rivit objekteissa), ja että onko vika enemmänkin tapahtumia näytettäessä UI puolella kuin tietokannassa.
- Tapahtuman lisääminen toimii normaalisti
- 35 tapahtuma tulee näkyviin normaalisti..
Mutta sen jälkeen kun lisää 36 tapahtuman, niin se tulee viimeksi lisätyn tapahtuman kohdalle. Olen miettinyt voiko tyyleissä (css) olla jokin vialla. Ylläpito puolella kaikki tapahtumat listataan normaalisti ja homma toimii.
Olen miettinyt voiko sql-lause tuottaa sittenkin ongelmia.
Lisäys:
-----------------------------------------------------------------
SQL-lausetta testattu ja tyylimääritelmiä, mutta ei apua. Tämä on todella mystinen ongelma - selkeästi vaikein jonka olen kohdannut. Loogisesti ajatellen tässä ongelmassa ei ole mitään järkeä.
Tavallaan voisi olettaa että SQL-lauseessa vika sillä ylläpito puolelle haetaan tiedot näin:
$sql_lauseke = "SELECT * FROM Tapahtuma ORDER BY tVuosi, tKuukausi, tPaiva, tNimi";
Tapahtumat sivulle haetaan tietoa näin:
$sql_lauseke = "SELECT Varaus.Tapahtuma_Id, COUNT(Varaus.Tapahtuma_Id), Tapahtuma.tStatus, Tapahtuma.T_Id, Tapahtuma.tNimi, Tapahtuma.tVuosi, Tapahtuma.tKuukausi, Tapahtuma.tPaiva, Tapahtuma.tViikonpaiva, Tapahtuma.tTarve, Tapahtuma.tAlkaa, Tapahtuma.tLoppuu, Tapahtuma.tSijainti FROM Varaus RIGHT JOIN Tapahtuma ON Varaus.Tapahtuma_Id = Tapahtuma.T_Id WHERE Tapahtuma.tStatus = 'Tapahtumat' GROUP BY Varaus.Tapahtuma_Id ORDER BY tVuosi, tKuukausi, tPaiva";
Oletko kokeillut ajattaa tuota pidempää kyselyä esim. phpMyAdminissa?
Hmm.. kokeillaan, kiitos!
Lisäys:
Nykyään SQL-lause siis tämä: (kiitos nimimerkille jukkah, aikaisemmasta avusta)
SELECT COUNT( Varaus.Tapahtuma_Id ) , Tapahtuma.tStatus, Tapahtuma.T_Id, Tapahtuma.tNimi, Tapahtuma.tVuosi, Tapahtuma.tKuukausi, Tapahtuma.tPaiva, Tapahtuma.tViikonpaiva, Tapahtuma.tTarve, Tapahtuma.tAlkaa, Tapahtuma.tLoppuu, Tapahtuma.tSijainti FROM Varaus RIGHT JOIN Tapahtuma ON Varaus.Tapahtuma_Id = Tapahtuma.T_Id WHERE Tapahtuma.tStatus = 'Tapahtumat' GROUP BY Varaus.Tapahtuma_Id ORDER BY tVuosi, tKuukausi, tPaiva
TULOS: Näkyvillä rivit 0 - 29 ( 35 yhteensä, kysely kesti 0.0015 sek.)
Lisäys:
-----
Pahimmassa tapauksessa tämä liittyy taas siihen että kun tapahtumien varaustenmäärä näyttää vielä -> 0
..mutta luulin että RIGHT JOIN poistaa tämän ongelman.. huoh..
Lisäys:
------------------------------------------------------------------------
Kun varaan tapahtuman 35 tulee näkyviin tapahtuma 36.. jne. Eli ongelma liittyy varausten määrään.
Testi 2 1.1.2013 06:00-06:00 0 /1
Testi 1 1.1.2013 06:00-06:00 1 /1
- Eli kun varasin tapahtuman Testi 1 niin näkyviin tuli tapahtuma Testi 2... huoh.. miten tämän ongelman saisi pois. Eli systeemissä vika kun varauksia ei ole vielä tehty lainkaan...
Jos tapahtumassa ei ole varauksia, kyselyssäsi Varaus.Tapahtuma_Id on NULL, joten tähän perustuva GROUP BY yhdistää kaikki varauksettomat tapahtumat, mistä seuraa, että kyselysi palauttaa vain yhden näistä.
Kyselyitä kannattaa suunnitella ihan järjellä. Haluat hakea kaikki tapahtumat, joten laita Tapahtuma FROM-kohtaan ja käytä GROUP BY -kohdassa Tapahtuma-taulusta tulevaa id:tä. Esimerkiksi seuraavat kyselyt toimivat. Ensimmäinen on vähän parempi, toisen taas on tarkoitus osoittaa, että usein on olemassa myös vaihtoehto, joka voi olla helpompi keksiä.
SELECT Tapahtuma.*, COUNT(Varaus.Tapahtuma_Id) AS maara FROM Tapahtuma LEFT JOIN Varaus ON Tapahtuma_Id = T_Id WHERE tStatus = 'Tapahtumat' GROUP BY T_Id ORDER BY tVuosi, tKuukausi, tPaiva
SELECT Tapahtuma.*, (SELECT COUNT(*) FROM Varaus WHERE Tapahtuma_Id = T_Id) AS maara FROM Tapahtuma WHERE tStatus = 'Tapahtumat' ORDER BY tVuosi, tKuukausi, tPaiva
Älä nyt ymmärrä väärin Metabolix, mutta mielestäni olet lähes Steve Jobsin kaltainen nero..
Eli homma toimii täydellisesti ja mikä parasta antamaasi ylempää SQL-lausetta oli mukava testata PHP MyAdminissa, näkee mukavasti millaista tietoa tulostuu ja missäkin järjestyksessä.
kiitos!!
Lisäys:
------------------------
Alempi lausekkin toimii loistavasti. Huh mikä helpotus, luulin jo tulleeni hulluksi kun yht'äkkiä en saanutkaan kaikkia tapahtumia näkymään.
latenleffahylly kirjoitti:
Älä nyt ymmärrä väärin Metabolix, mutta mielestäni olet lähes Steve Jobsin kaltainen nero..
Mutta eihän Steve Jobs juurikaan koodannut, vaan veteli vain naruista....
Nimen omaan.. "veteli naruista" ..mutta osasi hän myös koodata ja mikä tärkeintä hän osui aina asian ytimeen ja sai ongelmat ratkottua käsittämättömällä päättäväisyydellään.
luen muuten Jobsin elämänkertaa juuri iPadillani, lähes uskonnollinen kokemus
Lebe80 kirjoitti:
Mutta eihän Steve Jobs juurikaan koodannut, vaan veteli vain naruista....
Oli muutenkin jännä huomata miten uutinen Steve Jobsin kuolemasta jätti varjoonsa erään lähes samoihin aikoihin kuolleen, ainakin omalla listallani paljon suuremman tietotekniikan pioneerin...
jalski kirjoitti:
Lebe80 kirjoitti:
Mutta eihän Steve Jobs juurikaan koodannut, vaan veteli vain naruista....
Oli muutenkin jännä huomata miten uutinen Steve Jobsin kuolemasta jätti varjoonsa erään lähes samoihin aikoihin kuolleen, ainakin omalla listallani paljon suuremman tietotekniikan pioneerin...
Viitannet Dennis Ritchieen, jota voisi tituleerata oikeastaan koko nykytietotekniikan luojaksi (c-kieli ja unix-käyttöjärjestelmä).
Lisäys:
latenleffahylly kirjoitti:
Nimen omaan.. "veteli naruista" ..mutta osasi hän myös koodata ja mikä tärkeintä hän osui aina asian ytimeen ja sai ongelmat ratkottua käsittämättömällä päättäväisyydellään.
No ei se kyllä mikään koodari ollut, vaikka osasikin koodata hieman. Hän ei osunut asian ytimeen, vaan enemmänkin oli kyseessä "kuninkaan uusista vaatteista". Jobs ei myöskää itse yksin päättänyt noista asioista, vaan taustalla on ISO firma, jossa on useita henkilöitä. Enemmänkin uskon, että ison firman taustajoukot saivat aikaan isolla hypellä myyntiä aikaiseksi. Ei niinkään Jobsin ideoilla vaan enemmän Jobsin persoonalla.
Itse uskonkin, että useimmat jenkit ovat kohdanneetkin jo Apple-ähkyn, ja saattavatkin vaihtaa tietokone-/luuri-/tms. merkkinsä johonkin edullisempaan itämaiseen merkkiin, jotka kuitenkin on ominaisuuksiltaan omenaa edelle.
latenleffahylly kirjoitti:
luen muuten Jobsin elämänkertaa juuri iPadillani, lähes uskonnollinen kokemus
Itse katson juuri nettipornoa Galaxy Täbilläni. Flashi-striimit pyörivät ongelmitta. Voisi sanoa kauniiksi orgasmiseksi kokemukseksi, jota se myöskin on.
Lisäksi voin soittaa ilman lisämaksua videopuhelun äidilleni tässä samalla.
Lebe80 kirjoitti:
Viitannet Dennis Ritchieen, jota voisi tituleerata oikeastaan koko nykytietotekniikan luojaksi (c-kieli ja unix-käyttöjärjestelmä).
Todennäkoisesti, siitä en kyllä ole nähny kertaakaan otsikoissa, vaikka se todellakin olisi sen ansainnut ohjelmoinnin "isänä".
Lebe80 kirjoitti:
Itse katson juuri...
...Lisäksi voin soittaa ilman lisämaksua videopuhelun äidilleni tässä samalla.
Onnea..
Aihe on jo aika vanha, joten et voi enää vastata siihen.