Autor | Zpráva | ||
---|---|---|---|
AM_ Profil |
#1 · Zasláno: 2. 6. 2009, 10:58:44
Zdravím,
mám tabulku: zamestnanec INT zacatek_volna DATE konec_volna DATE Lze nějak napsat podmínku (něco jako unique key), která zajistí, že se v databázi nebudou vyskytovat dva záznamy jednoho zaměstnance, které by se časově překrývaly, nebo se to musí ošetřit v programové vrstvě? |
||
tiso Profil |
#2 · Zasláno: 2. 6. 2009, 11:07:29
AM_ - b) je správne...
a) jedine ak by si ukladal celé dni voľna (zamestnanec INT, volny_den DATE) |
||
Kajman_ Profil * |
#3 · Zasláno: 2. 6. 2009, 11:13:11
Snad triggerem bofere insert or update, který vyvolá chybu.
|
||
AM_ Profil |
#4 · Zasláno: 2. 6. 2009, 11:23:39
ok, díky za pomoc, jdu studovat triggery :)
|
||
AM_ Profil |
#5 · Zasláno: 2. 6. 2009, 12:18:30
Tak se mi objevil další problém. Mám takovýto trigger:
CREATE TRIGGER loan_check BEFORE INSERT ON loans FOR EACH ROW BEGIN DECLARE dummy INT; SELECT COUNT(id) INTO dummy FROM loans WHERE employee_id=NEW.employee_id AND start_date < NEW.end_date AND end_date > NEW.start_date; IF dummy > 0 THEN NEW.start_date = 'abcdefgh'; END IF; END; Na řádku 3 (DECLARE dummy INT) mi to pořád hlásí syntaktickou chybu, ale přesně takhle je to v různých manuálech, netuším, kde by mohl být problém. Mám MySQL 5.0.51a |
||
Kajman_ Profil * |
#6 · Zasláno: 2. 6. 2009, 12:23:42
Nezapomněl jste změnit delimiter?
|
||
Mastodont Profil |
#7 · Zasláno: 2. 6. 2009, 12:30:59
Klasický problém s oddělovačem? Zkus
DELIMITER $$ CREATE TRIGGER loan_check BEFORE INSERT ON loans FOR EACH ROW BEGIN DECLARE dummy INT; SELECT COUNT(id) INTO dummy FROM loans WHERE employee_id=NEW.employee_id AND start_date < NEW.end_date AND end_date > NEW.start_date; IF dummy > 0 THEN NEW.start_date = 'abcdefgh'; END IF; END$$ DELIMITER ; |
||
AM_ Profil |
#8 · Zasláno: 2. 6. 2009, 13:56:03
Jo díky, ale delimiter změněný mám, nějak jsem to nepovažoval za důležité tak jsem vytáhl jen část s triggerem :) chybu to hlásí přímo v tom příkazu DECLARE, konkrétně you have an error near 'dummy INT; SELECT ...'
|
||
Kajman_ Profil * |
#9 · Zasláno: 2. 6. 2009, 14:03:23
Ještě by mohla fungovat verze s uživatelskou proměnnou.
SET @dummy=0; SELECT COUNT(id) INTO @dummy FROM loans WHERE employee_id=NEW.employee_id AND start_date < NEW.end_date AND end_date > NEW.start_date; IF @dummy > 0 THEN SET NEW.start_date = 'abcdefgh'; END IF; |
||
TomášK Profil |
#10 · Zasláno: 2. 6. 2009, 15:45:39
Nebo i bez proměnné...
IF (SELECT COUNT(id) FROM ... ) > 0 THEN SET NEW.start_date = 'abcdefgh'; END IF; Chyba je podle mě v chybějícím SET (Kajman_ už ho tam má) |
||
AM_ Profil |
#11 · Zasláno: 3. 6. 2009, 09:28:07
[#9]
stále hází You have an error ... near '@dummy INT' at line 3 Nechápu, proč ty proměnné nemůžu deklarovat :( [#10] taky nejde, tentokrát you have an error ... near '' at line 4 což mi fakt moc nepomůže... line 4 vychází na ten dotaz s vnořeným selectem (alespoň jak to zformátuje phpmyadmin) a když jsem si z něj odmazal NEW a spustil to samostatně tak tam chyba není... Nevyřešil to ani SET, ani zavináč, ani proměnnou zrušit úplně... už vážně netuším, co dělám špatně, nemůže to být tím, že to tlačím přes myadmina? ten se s tím údajně nějak nemá moc rád, ale psát to do přímo do mysql terminálu kde když se spletu musím to psát celé znova je vážně otrava... |
||
Kajman_ Profil * |
#12 · Zasláno: 3. 6. 2009, 11:37:58
Co zkusit mysql query browser?
|
||
Kajman_ Profil * |
#13 · Zasláno: 3. 6. 2009, 11:40:13
Nebo phpminadmin.
|
||
AM_ Profil |
#14 · Zasláno: 3. 6. 2009, 12:06:05
Kajman_
Díky za tip, zkusím :) |
||
Časová prodleva: 15 let
|
0