Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2015-03-10 16:20:52

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

[MySQL] Niby proste zadanie...

Hej

Jest sobie wordpress, jakieś tam mniej lub bardziej szemrane wtyczki, no i trzeba toto zmusić do działania tak jak ja chcę a nie tak jak chciał wtyczkopisacz :)

Jest sytuacja zastana:
W tabeli wp_options jest sobie rekord z name='wtyczka' i value (text) na którym wtyczka sobie operuje

Sytuacja wymagana:
Jest dodatkowa tabela, zawierająca jakiś klucz i wartość, coś w stylu:

Kod:

create table wp_dupa (
  klucz text unique not null,
  value text
);

W tabeli wp_options jest sobie dodatkowy rekord zawierający aktualny klucz i name powiedzmy "pupa".
Cały pic polega na tym, aby:
a) jakakolwiek zmiana rekordu 'wtyczka' w tabeli wp_options spowodowała przepisanie value do tabeli wp_dupa do rekordu określonego przez klucz pobrany z rekordu "pupa" w wp_options;
b) zmiana wartości w rekordzie "pupa" w wp_options powodowała przepisanie odpowiedniej wartości z tabeli wp_dupa do wp_options do rekordu "wtyczka";

ale

c) przepisanie z punktu b) nie może wywoływać akcji z punktu a)

Czyli co chcę osiągnąć:

a) wtyczka sobie cały czas operuje na swoim rekordzie
b) chcę umożliwić operowanie owej wtyczki na różnych rekordach (z zastrzeżeniem, że zawsze podaję "rekord aktualny") - czyli zawsze mam w wp_dupa aktualną kopię rekordu z wp_options;
c) nie mam możliwości zmiany kodu wtyczki (z przyczyn czysto technicznych)

W postgresie to bym zrobił w ciągu paru minut (trigger w pgplsql) - ale w MySQL jakoś nie bardzo wiem od której strony to chwycić...

Jakieś pomysły?

@Jacekalex - Ty zdaje się piałeś peany na temat MySQL-a, może coś podpowiesz?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#2  2015-03-10 16:44:19

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [MySQL] Niby proste zadanie...

może normalny trigger zgodnie z dokumentacją? :> coś w stylu

Kod:

create trigger dupa_update after update on wp_options
update wp_dupa set pole_z_wp_dupa = NEW.interesujące_pole_z_tableli_wp_options

LRU: #472938
[b]napisz do mnie:[/b] ola@mojmail.eu
[url=http://valhalla.org.pl]Hołmpejdż[/url] | [url=http://valhalla.org.pl/foto]Galerie[/url] | [url=http://valhalla.org.pl/tech]"Twórczość"[/url] || [url=http://img.munn.in]Free Image Hosting[/url]

Offline

 

#3  2015-03-10 16:50:57

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

@Jacekalex - Ty zdaje się piałeś peany na temat MySQL-a, może coś podpowiesz?[/quote]
Możesz w kodzie wtyczki dać, aby inserta puszczał równocześnie na rożne tabele, albo Trigger, jak wyżej Winnetou napisał.
Zależy, gdzie to chcesz mieć robione, na poziomie bazy (automat w SQL),
czy wtyczki (kod PHP).

A poza tym, to nie napisałeś, co to za wtyczka, i czego od niej dokładnie oczekujesz.

PS:
Moje Peany na temat Mysqla dotyczyły (jak zapewne pamiętasz) łatwości konfigurowania uprawnień, i bardzo szczelnej separacji uprawnień poszczególnych użytkowników bazy, czego w Postgresie nie zauważyłem na razie, mam na myśli konkretnie dostęp pacjenta do informacji o uprawnieniach innych pacjentów, tego dotyczyła nasza ówczesna dyskusja.

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2015-03-10 16:53:38)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#4  2015-03-10 16:53:00

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

Tak mam i niestety działa źle - czasami myli rekordy i wpisuje do wp_dupa niewłaściwe wartości (tzn. przełączenie zmiany w wp_options(pupa) powoduje niepotrzebne przepisanie wartości)

___


[quote=Jacekalex]Zależy, gdzie to chcesz mieć robione, na poziomie bazy (automat w SQL),
czy wtyczki (kod PHP).[/quote]
Niestety na poziomie bazy - nie panuję nad tym co robi wtyczka

A poza tym, to nie napisałeś, co to za wtyczka, i czego od niej dokładnie oczekujesz.[/quote]
Konkretnie to NXS (aka SNAP) a chodzi o możliwość istnienia zamiennie kilku(set) konfiguracji na jednym wordpressie.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#5  2015-03-10 16:58:19

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [MySQL] Niby proste zadanie...

Daj fragment obu interesujących Cię tabel (1 rekord styknie) razem z konkretnymi nazwami pól i rozpisz jakie przypadki konkretnie Cię interesują :)

P.S.
Logika w bazie (zwłaszcza w mysqlu) to ZUO :)


LRU: #472938
[b]napisz do mnie:[/b] ola@mojmail.eu
[url=http://valhalla.org.pl]Hołmpejdż[/url] | [url=http://valhalla.org.pl/foto]Galerie[/url] | [url=http://valhalla.org.pl/tech]"Twórczość"[/url] || [url=http://img.munn.in]Free Image Hosting[/url]

Offline

 

#6  2015-03-10 17:00:14

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

Kilkaset konfigów na jednym WP? Jaja sobie robisz?

Łatwiej zatrudnić wp_cli, i metodą pętli zrobić kilkaset instalacji WP.
Zawsze możesz też na bazie oryginalnej wtyczki napisać własną, a potem zarabiać na dobrowolnych datkach zachwyconych pacjentów, jak niejaki [url=https://addons.mozilla.org/pl/firefox/addon/adblock-plus/developers]Wladimir Palant[/url].
Wielkiego majątku na tym nie zrobisz, ale na porządnego UPSa do RPi pewnie uzbierasz. xD

Ostatnio edytowany przez Jacekalex (2015-03-10 17:08:21)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2015-03-10 17:07:10

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

Tabela wp_options - dwa rekordy:

Kod:

(option_name='wtyczka', option_value='jakiś_serializowany_pehap')
(option_name='klucz_ethanaka', option_value='jeden')

Tabela wp_dupa (n rekordów):

Kod:

(klucz='jeden', value='jakiś_serializowany_pehap')
(klucz='dwa', value='inny_serializowany_pehap)
(klucz='trzy', value='jeszcze inny_serializowany_pehap)
...

W tabeli wp_dupa musi [b]zawsze[/b] siedzieć kopia aktualnego (pokazywanego przez klucz_ethanaka) rekordu z wp_options z option_name='wtyczka';
W tabeli wp_options w rekordzie opisywanym przez option_name='wtyczka' [b]zawsze[/b] musi siedzieć kopia rekordu z wp_dupa wskazywanego przez klucz_ethanaka.

Chyba nic nie pominąłem...

@jacekalex: nie, nie robię jaj, ja z tego mam na chleb i nawet na kiełbasę do chleba.
Owszem mógłbym - tylko że wtyczka dostaje upgrady dość często, poza tym część jest wojennotajna (wtyczka nie jest niestety open).
Kilkuset wordpressów próbowałem - niestety zarzyna to serwer.

Ostatnio edytowany przez ethanak (2015-03-10 17:09:44)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#8  2015-03-10 17:09:53

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

@jacekalex: nie, nie robię jaj, ja z tego mam na chleb i nawet na kiełbasę do chleba.[/quote]
Ja nie robię jaj, pytałeś konkretnie mnie, to masz odpowiedź konkretnie ode mnie.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2015-03-10 17:15:55

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

Ej, to Ty mnie posądzałeś o robienie jaj ;) A ja mam po prostu taką pracę :(


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#10  2015-03-10 17:24:09

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

Ja niestety też mam podobną robotę, ale chyba w  mniejszej skali. ;)

A do robienia jaj są koguty, kaczory i indyki.

W każdym razie, wtyczka NXS jest do spamowania wpisami na społecznościówkach, chyba, że mówimy o dwóch różnych wtyczkach.
Ja znam tą:
http://www.nextscripts.com/products/

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2015-03-10 17:24:45)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11  2015-03-10 17:44:59

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

[quote=Jacekalex]W każdym razie, wtyczka NXS jest do spamowania wpisami na społecznościówkach[/quote]
To następną razą się uprzejmie nie pytaj co to za wtyczka jeśli masz jakieś wątpliwości do czego może służyć.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#12  2015-03-10 18:19:23

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

Chwileczkę, jest sobie wtyczka NXS, i jeśli zrozumiałem, kiedy ta wtyczka dodaje wpis np do Twittera, to równocześnie ma dodać wpis do tabeli wp-dupa na temat  wplsanej na Twittera wiadomości, tak? ma to być zrobione w bazie?
Triggery, we wszystkich systemach bazodanowych to robią, albo jakiś skrypt Crona, który kopiuje co trzeba między tabelami.

Wtyczka NXS jest odpalana z Crona? to dopisać kolejne polecenie do Crona chyba potrafisz, także osobny skrypt by ewentualnie miał sens.

Tu ma blogu masz kompletny przykład Triggera:
http://blog.adamzawalski.com/trigger-mysql/

Ostatnio edytowany przez Jacekalex (2015-03-10 18:24:32)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#13  2015-03-11 04:29:41

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

Nie, troszkę inaczej.
Po prostu rozszerzam pewne możliwości wtyczki (raczej mało komu przydatne). W tabeli trzyma swoje ustawienia (tzn. dane konta na których ma zrobic wpis). Mi chodzi o to, aby można było mieć więcej niż jeden zestaw danych (np. informacje o stronach typu "a" wrzucam na firmowego facebooka, a o stronach typu "b" na prywatnego, dodatkowo dając znać na twitterze). Teoretycznie coś takiego we wtyczce istnieje ale nie ma praktycznie żadnej możliwości sensownego zarządzania takimi "profilami", a przy ilości profili większej niż trzy jest to nie do ogarnięcia.

Zresztą chyba przyśniło mi się rozwiązanie, tylko nie wiem jak to na pisać w MySQL-u.

Wprowdzam dodatkowe pole do tabeli wp_options - np. z nazwą 'stary_klucz'. Triger after update do tabeli wp_options.

I teraz działanie triggera:
a) jeśli option_name = 'wtyczka', sprawdzam, czy zawartość option_value w polach z option_name = 'klucz_ethanaka' i 'start_klucz' są identyczne. Jeślii tak, kopiuję nową zawartość option_value do rekordu wp_dupa wskazanego przez ów klucz. Zapobiega to niepotrzebnemu kopiowaniu z następnej sytuacji;
b) jeśli option_name = 'klucz_ethanaka', kopiuję zawartość odpowiedniego rekordu z wp_dupa['klucz_ethanaka'] do pola wp_options['wtyczka'], a następnie poprawiam wartość w wp_options['stary klucz'].

Spróbuję czegoś takiego ale wydaje mi się że można jakoś prościej... bez pworowadzania dodatkowych rekordów.
Dzięki za przykład - popatrzę sobie dokładniej ale już po kawie.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#14  2015-03-11 05:05:20

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [MySQL] Niby proste zadanie...

Po drugiej kawie rzuć okiem na to, ładny przykład, jak w Triggerze używać IF, ELSE, WHILE i dosyć rozbudowane konstrukcje:
http://www.freemindsystems.com/blog/post/mysql-triggers-a-practical-example

Pozdro
;-)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2015-03-11 06:04:51

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [MySQL] Niby proste zadanie...

Dzięki - o to chyba chodziło!


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.015 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00028 SET CHARSET latin2
0.00010 SET NAMES latin2
0.00255 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.188.20.56' WHERE u.id=1
0.00156 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.188.20.56', 1714747626)
0.00064 SELECT * FROM punbb_online WHERE logged<1714747326
0.00080 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=27147 AND t.moved_to IS NULL
0.00007 SELECT search_for, replace_with FROM punbb_censoring
0.00251 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=27147 ORDER BY p.id LIMIT 0,25
0.00150 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27147
Total query time: 0.01001 s