PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
2x MySQL JOIN ning muud
Postitaja: PR 2015-11-03 11:55:42
1.
kirjuta SQL päring, mis leiab kõik filmid þanrist "Draama", mille laenutamine ei maksa rohkem kui 2 ühikut ja mis on pikkusega vahemikus 1,5 kuni 2 tundi
Nt:
SELECT name, length
FROM category
LEFT JOIN film
ON Tabelid on erinevad, kuid mõlemas tabelis pole sama asja: film.id=category.id - tuleks leida muu lahendus. Tabeleid muuta ei tohi. Kuidagi teha topelt JOIN .
WHERE name = 'drama%'
AND length BETWEEN 72 AND 132
AND replacement_cost <"2";

2.Kirjutada protseduur, mis täidab tabeli "t_data" etteantud parameetrite piirides (-10, 10) funktsiooni uurimise andmetega (~20000 rida). Tsükli sammu täpsus 3 kohta peale koma fn (võib lahenduses olla ükskõik milline) NB! protseduur ka välja kutsuda

3. Kirjutada trigger, mis lisab tabelisse "t_backup" kõik tabelist "t_data" kustutatud read kustutada tabelist "t_data" mõned read.
Mul on kuskil viga:

DROP TRIGGER IF EXISTS BEFORE_t_data_delete
CREATE TRIGGER BEFORE_t_data_delete $$
BEFORE DELETE ON t_data
FOR EACH ROW
BEGIN
INSERT INTO t_backup
SET action = 'delete',
x = OLD.x,
y = OLD.y,
changedOn = NOW();
END $$;


NB! Õpin alles!


Suured tänud ette!
RE: 2x MySQL JOIN ning muud
Postitaja: Arvi v 2016-05-20 08:31:47
1. millega on siis film ja category tabelid omavahel seotud?
2. ei saa aru
3. kas seda on ikka vaja, ise kasutan softdelete lahendust, kus tabelis on väljad deleted_at ja deleted_by default NULL. Need täidetakse ära kui keegi rea ära kustutab.
RE: 2x MySQL JOIN ning muud
Postitaja: gillbates 2016-06-07 18:23:50
Huvitav on leida, et mõni minu õpilastest on proovinud siin kooli testi lahendusi teiste käest küsida. PHP-ga pole siin midagi tegemist, puhas MySQL läbi PhpMyAdmini.

Foorumi admin võiks selle posti üldse ära kustutada.
RE: 2x MySQL JOIN ning muud
Postitaja: ei viitsi logida 2016-06-07 18:50:25
TSITEERITUD:
Huvitav on leida, et mõni minu õpilastest on proovinud siin kooli testi lahendusi teiste käest küsida. PHP-ga pole siin midagi tegemist, puhas MySQL läbi PhpMyAdmini.

Foorumi admin võiks selle posti üldse ära kustutada.


Sind küll....oleks siis lahenduse andnud ja hindamisel andnud teada, et kuna lahendus pole ise leitud, siis ei arvestata.....
RE: 2x MySQL JOIN ning muud
Postitaja: ise php 2016-06-07 21:19:51
Ja kusagil koodis kommentari lisanud, et tehtud õppejõu poolt. Mehed viskavad vabalt copy-paste letti ja pärast hea näidata koodis.
RE: 2x MySQL JOIN ning muud
Postitaja: gillbates 2016-06-07 22:53:14
ehh, alles täna avastasin.
RE: 2x MySQL JOIN ning muud
Postitaja: gillbates 2016-06-07 23:34:57
annan siis abi ka teistel sellest arusaamiseks:

TSITEERITUD:
1.
SELECT name, length
FROM category
LEFT JOIN film
ON Tabelid on erinevad, kuid mõlemas tabelis pole sama asja: film.id=category.id - tuleks leida muu lahendus. Tabeleid muuta ei tohi. Kuidagi teha topelt JOIN .
WHERE name = 'drama%'
AND length BETWEEN 72 AND 132
AND replacement_cost <"2";


Tegemist MySQL baasiga nimega Sakila.
selectimisel JOIN päringus on kasulik kasutada [tabeli_nimi].[veeru_nimi]
WHERE osas sama asi.
"= 'drama%'" ei sobi, korrektne on "LIKE 'drama%'" või "= 'drama'"
replacement_cost on number, kuid jutumärgid/ülakomad käivad ainult teksti ja kuupäevade ümber
FROM osas on film_category tabel, kus filmide seosed
veergu id ei ole üheski tabelis, on film_id ja category_id.
JOIN osas peale sõna ON on ilmtingimata vajalik kostruktsioon [tabel1_nimi].[veeru_nimi] = [tabel2_nimi].[veeru_nimi]


TSITEERITUD:

2.Kirjutada protseduur, mis täidab tabeli "t_data" etteantud parameetrite piirides (-10, 10) funktsiooni uurimise andmetega (~20000 rida). Tsükli sammu täpsus 3 kohta peale koma fn (võib lahenduses olla ükskõik milline) NB! protseduur ka välja kutsuda


võtta tühja sisuga protseduuri kest, lisada sinna sisse tsükkel (valida tsükli samm/loendaja vastavalt) ning siis tsükli sisse INSERT, s.t. igal tsükli sammul tehakse üks INSERT
kuna protseduurid ise käima ei lähe, siis on vaja see välja kutsuda.

TSITEERITUD:

3. Kirjutada trigger, mis lisab tabelisse "t_backup" kõik tabelist "t_data" kustutatud read kustutada tabelist "t_data" mõned read.
Mul on kuskil viga:

DROP TRIGGER IF EXISTS BEFORE_t_data_delete
CREATE TRIGGER BEFORE_t_data_delete $$
BEFORE DELETE ON t_data
FOR EACH ROW
BEGIN
INSERT INTO t_backup
SET action = 'delete',
x = OLD.x,
y = OLD.y,
changedOn = NOW();
END $$;


puudu alguse ja lõpu DELIMITER read
$$ märgid ei ole CREATE rea lõpus vaid DROP rea lõpus
puudu insertimisel uued väärtused NEW.x (sest kui sama tabeli peale teha AFTER UPDATE tüüpi trigger, siis saab ka kõik muudatused salvestada)
END rea lõpus ei ole semikoolonit

softdelete on muidugi õigem lahendus, kuid vastavas näidislahenuses tehakse DELETE päring ning siis softdelete ei aita

head päringute kirjutamist :)

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0798461437225