![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Może na prostym, fikcyjnym przykładzie:
Dodajemy wpis w CMS. Jednym z atrybutów wpisu są TAGI (0..n). Tagi dodawane są dynamicznie przez pola input (JS). Dodajemy wpis i kilka tagów my przypisanych. Tutaj nie ma większego problemu - korzystamy z INSERT w pętli, PS bądź insert batch (akurat teraz pracuje na CodeIgniter). Na tagi mamy oddzielną tabelę w bazie o strukturze: [ id ] [ art_id ] [ name ] I teraz chciałbym edytować listę. W jaki sposób? 1) update na podstawie [id], w porządku ale co zrobić gdy ktoś doda nowy tag? Wtedy też trzeba wykrywać nowo dodane wartości? 2) co zrobić w przypadku usunięcia? znów kolejne zapytania? Najprostsze rozwiązanie jakie mi przychodzi do głowy to: - usuwamy wszystko co ma art_id = X - dodajemy na nowo tagi Te rozwiązanie jest jednak niewygodne ze względu na szybkie narastanie wartości ID -> np. mając 20 tagów każda edycja (bez względu na to ile się zmieniło) zwiększa najwyższe id o 20. Poza tym te operacje wydają mi się mało wydajne - nawet gdy nie zmieni tagów to wykonają się dwa spore zapytania. Praktycznie ten problem koncepcyjny wraca do mnie jak bumerang. Za każdym razem mam jakiś pomysł ale żaden mnie nie satysfakcjonuje. Jakieś sugestie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Czytaj całe zdania, które cytujesz zresztą.
Chodziło mi o załatwienie tego jednym zapytaniem - INSERT nowy TAG, jeżeli BRAK wtedy RETURN ID. Ale się nie da. Sprawdzasz czy najpierw istnieje (i pobierasz te ID, to oczywiste), jeżeli nie ma to dodajesz i tak w pętli przy każdym tagu. Liczba zapytań = liczba tagów x 3 (sprawdzenie, insert w tabeli pierwszej, insert w tabeli drugiej). W każdym razie te rozwiązanie nie jest mi na rękę, przykład z tagami faktycznie może nie był dobrą analogią do mojego aktualnego problemu bo po prostu wartości dodawane z małym prawdopodobieństwem będą się dublować (np. imię i nazwisko, wtedy tym bardziej nie chciałbym aby jedno ID miały dwie różne osoby o takim samym imieniu i nazwisku). Ps. No i ogólnie teraz jeszcze jak myślę. Twoje rozwiązanie nie przewiduje literówek. Dodałem 10 tagów, w jednym była literówka. Poprawiam literówkę, daje wyślij (nie dodaje nic, nie usuwam). Skrypt usuwa wszystkie wpisy z TABELA ART_TAG. Dodaje od nowa w tym jednego tagu nie znajduje. Dochodzi tutaj obserwowanie czy nie ma jakichś tagów "bękartów" nie używanych nigdzie. Ten post edytował markonix 19.08.2013, 13:58:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 16:32 |