Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Unikanie duplikacji wierszy, Komórki nie są unikalne, jedynie ich kombincja
mlawnik
post 10.06.2013, 14:47:31
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


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
lobopol
post 10.06.2013, 15:13:55
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 10.06.2013, 15:18:57
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ą?


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 10.06.2013, 15:21:46
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mlawnik
post 10.06.2013, 15:24:40
Post #5





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

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


Mogę przykład?


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 10.06.2013, 15:25:42
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lobopol
post 10.06.2013, 15:26:37
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 10.06.2013, 15:26:41
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


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
lobopol
post 10.06.2013, 15:39:01
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 10.06.2013, 16:57:57
Post #10





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

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


A co przy dodawaniu rekordu?


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
lobopol
post 10.06.2013, 17:56:35
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 04:55