Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucz podstawowy z wielu kolumn
Forum PHP.pl > Forum > Bazy danych
WebCM
Tabela tags zawiera kolumny:
Cytat
+ ID - id tagowanego obiektu
+ TYPE - typ tagowanego obiektu
+ tag - słowo kluczowe
+ num - ilość obiektów, które mają ten sam tag (może nawet zbędne pole)

1) Aktualizacja tagów dla określonego obiektu

Usuwamy tagi:
  1. DELETE FROM tags WHERE ID=? AND TYPE=? AND tag NOT IN(...)

Wstawiamy nowe:
  1. REPLACE INTO tags (ID,TYPE,tag) VALUES (?,?,?)

Aby skorzystać ze składni REPLACE INTO, musiałbym utworzyć klucz podstawowy zawierający 3 pola:
+ ID
+ TYPE
+ tag

Czy takie rozwiązanie nie spowoduje jednak spadku prędkości wydobywania rekordów z tabeli?

Dane wyciągam na 2 sposoby - w instrukcji WHERE podając (ID i TYPE) albo tylko (tag).

Jakie indeksy powstawiać? Wyzwalaczy na razie nie chcę używać.
Riklaunim
A INSERTem to już nie możesz?
WebCM
Mogę, ale wtedy więcej roboty.

W przypadku REPLACE słowo kluczowe dla danego obiektu będzie istnieć w bazie tylko RAZ smile.gif
Riklaunim
To zrób wcześniej selecta by sprawdzić czy tag istnieje, czy nie i spokój. Im prostsze zapytania tym lepiej - łatwiej je napisać, sprawdzać, czy zmieniać.
thek
Po co tak się męczyć? Czy nie wystarczy zwykły unique lub primary zrobić na tych 3 kolumnach, co zresztą sam sugerowałeś na starcie? Jeśli ktoś doda identyczny to baza nie pozwoli bo juz bedzie mieć taki indeks. A w razie czego INSERT ... ON DUPLICATE UPDATE wystarczy i nie ma zabaw z REPLACE, które z tego co kojarzę jest wolniejsze, bo musi sprawdzić, usunąć i dodać, zamiast tylko sprawdzić i poprawić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.