Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokowanie takich samych wpisów w tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
neverdie
Mam problem z moją tabelą, a dokładniej z takimi samymi wpisami, np:

|Kolumna1|Kolumna2|
iso abc
iso abc

i teraz moje pytanie, jak zrobić, żeby więcej niż jedna wartość w kolumnie się nie powtarzała, poprostu żeby sie nadpisywały stare wartości, albo poprostu żeby wógóle nie dodawało nic, jeśli w tabeli istenieje już taki wpis? Wpisy do tabeli dodaje zapomocą skryptu php np:
get.php?pole1=&pole2=
dr_bonzo
  1. SELECT COUNT(*) AS ile_rekordow FROM tabelka WHERE kolumna1 = 'iso' AND Kolumna2 = 'abc'


i jesli ile_rekordow == 0, to ci sie rekord nie powtarza, else sie powtarza i robisz co uwazasz, blokujesz, updatujesz etc.

Ew. zakladasz klucz UNIQUE na te dwa pola, i w przypadku dodania drugiego takiego rekordu dostaniesz blad. Ew. Uzyj INSERT INTO .... ON DUPLICATE KEY..

http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html
webdice
Przenoszę na Baza danych / MySQL
kitol
Lepiej będzie:
INSERT IGNORE INTO ...
+ klucz UNIQUE jak radził dr_bonzo
Update nie jest potrzebny bo rekord po prostu ma się nie dodawać.
Qbexus
Dołączęsię mam w tabeli 2 pola id autoincrement i name unique ale niestety w polu name lądują duplikatu chć ponoć nie powinny a sql to nie moja działka ale potrzebuje unikalnych wpisów w tym polu.
Kod dodający to
Kod
mysql_query("INSERT INTO `keywords`(id,name) VALUES('','$key')");
Kicok
1. Jeśli możesz, to wykonaj zapytanie:
  1. SHOW CREATE TABLE `keywords`

i wklej tutaj wyniki

2. Upewnij się, że UNIQUE założone jest tylko na jedną kolumnę: `name`

3. Upewnij się, że dane które lądują w bazie danych na pewno są unikalne (może jakieś białe znaki sieją spustoszenie smile.gif )
Qbexus
Dostałem coś takiego
Kod
CREATE TABLE `keywords` (\n  `id` int(11) NOT NULL auto_increment,\n  `name` varchar(255) collate latin1_general_ci NOT NULL,\n  PRIMARY KEY  (`id`),\n  UNIQUE KEY `name` (`name`)\n) ENGINE=MyISAM AUTO_INCREMENT=4715 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

keye są przepuszczane przez trim żeby wyeliminować białe znaki.
szopen
a możesz pokazać jak wyglądeją te duplikaty (najlepiej na zrzucie)? name jest UNIQUE więc nie powinno ich być...
Qbexus
A widzisz szopen na zrzucie to widać jednak na końcu jednego jest \r\n ale czy trim nie powinno sobie z tym poradzić?
Pytanie pomocnicze jak się w prosty sposób pozbyć tych z \r\n na końcu z bazy?
szopen
Jeśli chodzi Ci o odpowiedź na SHOW CREATE to jest ona jak najbardziej poprawna. To są znaki łamania wierszy, które klient SQLowy powinien wyświetlić na konsoli.

PS. to co wstawiłeś to nie zrzut bazy...
Qbexus
no nie wstawiłem zrzutu ale na nim widać białe znaki jest np. 'key' i 'key\r\n' pytanie jak wywalić teraz z bazy 'key\r\n'
szopen
Jeśli chodzi o filtr TRIMowy to na szybko coś takiego:
TRIM(TRIM( BOTH "\r\n" FROM nazwapola))
A jak chcesz wywalić coś co kończy się na \r\n to... delete from ... nazwa like '%\r\n\' ?
Qbexus
Dzięki sprawa załatwiona.
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.