Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Unikanie duplikacji wierszy
Forum PHP.pl > Forum > Przedszkole
mlawnik
W jaki sposób unikać duplikacji wierszy w tabeli, jeżeli poszczególne wartości komórek nie są unikalne?


  1. --
  2. -- Structure for table `grades`
  3. --
  4.  
  5. DROP TABLE IF EXISTS `grades`;
  6. CREATE TABLE IF NOT EXISTS `grades` (
  7. `userId` int(11) NOT NULL,
  8. `subjectId` int(11) NOT NULL,
  9. `gradeValue` float NOT NULL,
  10. `gradeWeight` tinyint(1) NOT NULL,
  11. `gradeGroup` varchar(160) NOT NULL,
  12. `gradeTitle` varchar(160) NOT NULL,
  13. `gradeDate` date NOT NULL,
  14. `gradeAbbrev` varchar(3) NOT NULL,
  15. `gradeTrimester` tinyint(1) NOT NULL,
  16. `gradeDownloadDate` datetime NOT NULL,
  17. `gradeShown` tinyint(1) NOT NULL,
  18. KEY `userId` (`userId`)
  19. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  20.  


Generować md5 z każdej kombinacji i zapisywać w bazie?
Inny sposób?
Pozdrawiam,
mlawnik

EDIT: literówka w temacie
lobopol
Wytłumacz z czym masz problem? Możesz założyć klucz unique na kilka pól w tabeli (jeden klucz na kilka wierszy)
mlawnik
Każdy rekord w bazie danych to jedna ocena (taka z szkolnego dziennika).
Na żadne z tych pól nie mogę nałożyć unique, bo np. ocena może być pobrana w tym samym czasie, może mieć taką samą wartość (6) co inna ocena znajdująca się w bazie.
Albo np, dwóch użytkowników dostało taką samą ocenę z tego samego przedmiotu.
W związku z tym w jaki sposób przy kolejnym pobraniu danych nie zapisywać duplikatów?
Generować hash ze wszystkich wartości i porównywać czy jakąś inną metodą?
nospor
Cytat
Na żadne z tych pól nie mogę nałożyć unique,

Ale możesz nałożyć jeden UNIQUE na kilka pól, które będą określać unikalność danego rekordu.
mlawnik
Mogę przykład?
nospor
Czego przyklad? Tak jak zakładasz uniqe na jedno pole, tak i zakladasz na wiele pol. zamiast jednego pola wymieniasz definicji unique kilka pol.
lobopol
sugerując się twoim układem to nie wiem jak możesz się uchronić od duplikatów. Użytkownik wstawia ocenę i to już jest koniec taka ocena jest unikalna zawsze (w końcu uczeń może dostać kilka ocen z jednego przedmiotu tego samego dnia). Jedyna sytuacja pojawienia się duplikatu pojawia się gdy użytkownik doda kilka razy tą ocenę.
mlawnik
Dzięki, nie wiedziałem, że tak można. Chodziło mi o składnię.

Dla potomności:
http://stackoverflow.com/questions/635937/...olumns-in-mysql

@lobopol, o to już dba dziennik sam w sobie (każda ocena za co innego), ja tylko przez curla pobieram oceny i zapisuję do swojej bazy.
lobopol
to masz jeszcze prościej dodajesz pole id z autoincrementem w tej tabelce i pobierasz oceny o konkretnym id
mlawnik
A co przy dodawaniu rekordu?
lobopol
Niezbyt rozumiem, tylko zdrowy rozsądek bo uczeń może mieć dowolną liczbę takich samych ocen. No chyba, że pozwalasz tylko na 1 ocenę danego dnia+typu+przedmiotu to wtedy zostawiasz sobie unique
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.