Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Unikanie duplikacji wierszy, Komórki nie są unikalne, jedynie ich kombincja
mlawnik
post
Post #1





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował mlawnik 10.06.2013, 14:50:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
lobopol
post
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


Wytłumacz z czym masz problem? Możesz założyć klucz unique na kilka pól w tabeli (jeden klucz na kilka wierszy)
Go to the top of the page
+Quote Post
mlawnik
post
Post #3





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


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ą?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
mlawnik
post
Post #5





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


Mogę przykład?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czego przyklad? Tak jak zakładasz uniqe na jedno pole, tak i zakladasz na wiele pol. zamiast jednego pola wymieniasz definicji unique kilka pol.
Go to the top of the page
+Quote Post
lobopol
post
Post #7





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
mlawnik
post
Post #8





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mlawnik 10.06.2013, 15:28:44
Go to the top of the page
+Quote Post
lobopol
post
Post #9





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


to masz jeszcze prościej dodajesz pole id z autoincrementem w tej tabelce i pobierasz oceny o konkretnym id
Go to the top of the page
+Quote Post
mlawnik
post
Post #10





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


A co przy dodawaniu rekordu?
Go to the top of the page
+Quote Post
lobopol
post
Post #11





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:30