Autor Zpráva
AM_
Profil
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
AM_ - b) je správne...
a) jedine ak by si ukladal celé dni voľna (zamestnanec INT, volny_den DATE)
Kajman_
Profil *
Snad triggerem bofere insert or update, který vyvolá chybu.
AM_
Profil
ok, díky za pomoc, jdu studovat triggery :)
AM_
Profil
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 *
Nezapomněl jste změnit delimiter?
Mastodont
Profil
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
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 *
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
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
[#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 *
Co zkusit mysql query browser?
Kajman_
Profil *
Nebo phpminadmin.
AM_
Profil
Kajman_
Díky za tip, zkusím :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0