Aktualizacja wiele rekordów danymi z innej tabeli + DUPLICATE KEY ?

0

Czy da się zrobić coś takiego, aby aktualizowało/ lub tworzyło nowy rekord w tabeli na podstawie danych z innej tabeli? udało mi się jedynie zrobić aktualizacje, ale czasami bywa tak że rekord nie istnieje i trzeba go utworzyć i jak ja mam zrobić ?

$UP =  'UPDATE #__forum_users_posts_in AS t
			JOIN (
			SELECT
			userid, count(*) AS sum_total
			FROM
			#__forum_messages AS t2
			WHERE
			T2.thread = '.$topicId.' and hold = 0
			GROUP BY
			t2.userid
			) AS t2 ON t.userid = t2.userid and (idcat = '.$cat->id.' or idcustom = '.$selectcustom1.')
			SET  t.posts =  t.posts + t2.sum_total';

Podsumowując chodzi mi o to by przerobić powyższy kod tak aby tworzył nowy rekord jeśli nie ma takiego który mogłyy zaktualizować
Próbowałem zastosować mniej więcej coś takiego z ON DUPLICATE KEY UPDATE. Tylko, że aktualizuje rekordy gdzie zgadza się ID, a musi porównywać userid|idcat|idcustom.

INSERT INTO `table` (`columns`) VALUES
(...)
ON DUPLICATE KEY UPDATE
`column` = VALUES (`column`);
0

Jeśli chcesz mieć to zrobione maksymalnie wydajnie, musisz wiedzieć których operacji będzie więcej. Np u ciebie rozumiem, inserty będą rzadkie, deletów nie będzie, a ponad 90% to będą updaty, więc możesz robić update w resulcie dostajesz informacje ile rekordów zaktualizowano, jeśli 0 to robisz inserta.

0

Próbowałem zastosować mniej więcej coś takiego z ON DUPLICATE KEY UPDATE. Tylko, że aktualizuje rekordy gdzie zgadza się ID, a musi porównywać userid|idcat|idcustom.

To musisz mieć potrójny klucz unikalny nałożony na te pola i na jego podstawie robić porównanie, a nie głównego ID.

0

A nie starczy Ci stworzyć widok w bazie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1