Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: automatyczne dodawanie nazwy użytkownika do kolumny
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

od jakiegoś czasu buduję małą bazę danych w firmie. Baza jest na Mysqlu, a jako frontend korzystamy z darmowago BASE pakietu libreoffice. Co jakiś czas napotykam na problem, ale jak do tej pory google pomagało. Niestety rozwiązania mojego aktualnego problemu nigdzie nie mogę znaleźć. Chciałbym aby przy dodawaniu nowego rekordu (np. nowego produktu) w kolumnie "dodal" automatycznie uzupełniał się login użytkownika, który dodał dany produkt. Udało mi się zrobić automatyczne dodawanie daty dodania rekordu poprzez ustawienie kolumny domyślnie jako CURRENT TIMESTAMP. Czy tutaj rozwiązanie jest podobne? Proszę o jakąkolwiek wskazówkę.
Pyton_000
Zapisujesz sobie ID użytkownika który dodaje, a potem przy wyświetlaniu JOIN z kolumna uzytkownika
mihmih
dzięki za odpowiedź, alenie do końca rozumiem...skoro mam użyć polecenia JOIN to znaczy że jeśli baza ma kilku użytkowników to istnieje jakaś tabela z nimi? I co znaczy zapisać sobie ID? Można prosić w prostszych słowach?smile.gif

jednak jest taka tabela, właśnie wyczytałem o tym:) mysql.user . Ale dalej nie wiem jaką relacją miałbym ją połączyć z moją tabelą? Nie jest tu czasami potrzebny TRIGGER aby rozwiązać mój problem?
kartin
USER() + SUBSTRING_INDEX() i dostaniesz nazwę użytkownika.
mihmih
próbuję, próbuję i nic...

  1. ALTER TABLE tblname
  2. ADD COLUMN createdby DEFAULT CURRENT_USER

Czy to nies tak
takie coś nie działa. Nie działa również gdy zamienię CURRENT_USER na USER. Czy to nie jest tak że obydwa te wyrażenia są funkcjami i nie można ich ustawiać jako wartości domyślne? Jeśli tak to jak stworzyć kolumnę, która będzie zawierałą login użytkownika bazy, który dodał konkretny rekord?
Pyton_000
Nie możesz nadać wartości domyślnej jako funkcji. Zostaje trigger:

  1. CREATE TRIGGER before_insert_tblname
  2. BEFORE INSERT ON tblname
  3. FOR EACH ROW
  4. SET new.createdby = USER();
mihmih
działa, dziękuje za pomoc. Dodałem jeszcze SUBSTRING_INDEX żeby został sam login:

  1. CREATE TRIGGER before_insert_tblname
  2. BEFORE INSERT ON zamowienia
  3. FOR EACH ROW
  4. SET new.kto_dodal = SUBSTRING_INDEX ( USER(), '@', 1)


tylko tak teraz sobie myślę...użytkowników w bazie mam np. jan_wrobel. Nawet nie sprawdzałem, ale podejrzewam że nazwa użytkownika Jan Wróbel odpada(spacje, polskie litery itp). Może to już czepianie się ale można zrobić coś żeby był wyświetlany Jan Wróbel, a nie jan_wrobel? CASE WHEN przychodzi mi do głowy, ale przy każdym nowym użytkowniku trzeba byłoby aktualizować trigger...
Pyton_000
Możesz zrobić sobie tabelkę z użytkownikami

table_users
username | show
--------------------
jak_kowalski | Jan Kowalski

i wtedy trigger pobierający wartość z tabeli.
Dodajesz tylko sobie do tej tabelki wyświetlanie.
mihmih
ale to chodzi o wykorzystanie CASE_WHEN? O takie coś?


  1. CREATE TRIGGER before_insert_tblname
  2. BEFORE INSERT ON zamowienia
  3. FOR EACH ROW
  4. SET new.kto_dodal = CASE_WHEN (SUBSTRING_INDEX ( USER(), '@', 1)) = username THEN SHOW ELSE SUBSTRING_INDEX ( USER(), '@', 1) END


to jakaś bzdura to co napisałem...nie ma tu nigdzie informacji z jakiej tabeli pochodzą kolumny username i show...
Pyton_000
SET NEW.kto_dodal = (SELECT show FROM tabela_userow WHERE username = SUBSTRING_INDEX ( USER(), '@', 1))

Coś w ten deseń. I Musisz stworzyć NOWĄ tabelę z zamiennikami użytkowników z bazy do wyświetlania.
mihmih
działa, jeszcze raz dziękuję za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.