Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> automatyczne dodawanie nazwy użytkownika do kolumny
mihmih
post
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zapisujesz sobie ID użytkownika który dodaje, a potem przy wyświetlaniu JOIN z kolumna uzytkownika
Go to the top of the page
+Quote Post
mihmih
post
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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?(IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
kartin
post
Post #4





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


USER() + SUBSTRING_INDEX() i dostaniesz nazwę użytkownika.
Go to the top of the page
+Quote Post
mihmih
post
Post #5





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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();
Go to the top of the page
+Quote Post
mihmih
post
Post #7





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mihmih
post
Post #9





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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...

Ten post edytował mihmih 5.06.2015, 14:26:04
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mihmih
post
Post #11





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


działa, jeszcze raz dziękuję za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 02:31