2012-11-05 26 views
5

OK, jestem prawie pewien, że nie jestem pierwszym, który w tym uczestniczy, po prostu nie znam odpowiednich słów, by znaleźć rozwiązanie. rozważyć następujące tabele bazy danych (uproszczone na to pytanie):

database tables http://www.nth-root.nl/public/images/wolf/cat_attr.png

Jak widać na zdjęciu, znajduje się stół kategoria, która posiada kategorie produktów i tabela atrybutu, która posiada różne atrybuty. Na przykład: Kolor (dla odzieży), Pojemność (dla odtwarzaczy mp3) itp.

Trzecia tabela, pośrodku obrazu, łączy atrybuty z kategoriami.

Teraz w backendach mam stronę "Edytuj kategorię" z formularzem do edycji (lub dodania) kategorii. Na tej samej stronie chcę wyświetlić listę list rozwijanych w celu zarządzania atrybutami powiązanymi z bieżącą kategorią produktów.

backend http://www.nth-root.nl/public/images/wolf-commerce/edit_category.png

wykorzystuje jQuery dodawać/usuwać listy rozwijanej.

Problem polega na tym, w jaki sposób manipulować danymi w tabeli category_attribute, używając danych $ _POST formularza.

Leniwy rozwiązaniem byłoby (i tak robiłem to w przeszłości):
1. Usuń wszystkie aktualne wiersze w category_attribute dla danej kategorii
2. Następnie włóż wszystkie wybrane atrybuty category_attribute

Ale to nie jest bardzo wydajne, usuwa i ponownie dodaje wszystkie wiersze, nawet jeśli ktoś zmienia tylko tytuł kategorii.

Więc szukam sposobu, aby zrobić dobry wkładki, aktualizacje i delecji:
1. usunąć wiersze, które nie pojawiają się w $ _POST (listy rozwijanej został usunięty)
2. Aktualizacja wiersze, które zostały zmienione (wybrano inną opcję z rozwijanego menu)
3. Wstaw nowe wiersze (dodano nowe menu rozwijane)

Po prostu nie jestem pewien, jak to zrobić lub gdzie znaleźć dobry przykład. Prawdopodobnie jest to łatwe w przypadku niektórych ajaxów, ale szukam rozwiązania, które jest czysto php, porównując wartości $ _POST z wartościami w bazie danych.

Jeśli ktoś zna dobry artykuł, który wyjaśnia najlepsze (i najbardziej skuteczne) rozwiązanie, proszę dać mi znać, byłbym bardzo wdzięczny.

-edit-
Dołączyłem kilka zdjęć, aby wyjaśnić moje pytanie, ale przepełnienie stosu odmówiło uwzględnienia ich, ponieważ moja reputacja jest zbyt niska, więc mam nadzieję, że moje pytanie jest wystarczająco jasne bez obrazów.

-edit2- Teraz mam dość reputacji, dodałem zdjęcia.

Dzięki z góry,

Nic

+1

część słownictwa, którego mógł brakować w swoim google fu. http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model – ficuscr

+1

Ponadto twoja tabela kategorii jest nazywana złączem/skrzyżowaniem/wiele-do-wielu/tabelą przestawną http://pl.wikipedia.org/wiki/Junction_table –

+0

Wstawiasz nowe rzeczy przez javascript? –

Odpowiedz

2

Insert i Update:
można wstawić ukryte wejście z zapisów identyfikacyjnych.
Ci, którzy są nowi, zresetują ten identyfikator, więc robisz wkładkę.
Identyfikatory, które Cię wypełniły, aktualizują. Jeśli chcesz tylko wykonać aktualizację naprawdę zmieniono elementy, możesz utworzyć ukryte wejście "UPDATED" o wartości "0". Za pomocą javascript można sprawdzić, czy kombi się zmieniło, tak aby dane wejściowe zostały oznaczone jako "1".

Wykluczenie:
Podobnie można zrobić wykluczeniu, tworząc ukryte wejście punktacji rekordy, które powinny zostać usunięte, gdy użytkownik kliknie w celu usunięcia.

Nie wiem, czy jest to odpowiedni sposób dla ciebie, czy oczekujesz bardziej praktycznego rozwiązania.

+0

Dzięki! To na pewno mnie uruchomi. –

Powiązane problemy