neverdie
21.07.2008, 01:31:41
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
21.07.2008, 04:11:15
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
21.07.2008, 10:32:20
Przenoszę na Baza danych / MySQL
kitol
21.07.2008, 12:39:37
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
31.08.2008, 09:46:33
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
31.08.2008, 15:23:08
1. Jeśli możesz, to wykonaj zapytanie:
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

)
Qbexus
31.08.2008, 19:41:40
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
31.08.2008, 20:34:06
a możesz pokazać jak wyglądeją te duplikaty (najlepiej na zrzucie)? name jest UNIQUE więc nie powinno ich być...
Qbexus
31.08.2008, 21:29:15
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
31.08.2008, 21:35:40
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
31.08.2008, 21:48:16
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
31.08.2008, 22:14:48
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
1.09.2008, 08:16:22
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.