Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Blokowanie takich samych wpisów w tabeli
neverdie
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 21.07.2008

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


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=
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Przenoszę na Baza danych / MySQL
Go to the top of the page
+Quote Post
kitol
post
Post #4





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

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


Lepiej będzie:
INSERT IGNORE INTO ...
+ klucz UNIQUE jak radził dr_bonzo
Update nie jest potrzebny bo rekord po prostu ma się nie dodawać.
Go to the top of the page
+Quote Post
Qbexus
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


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')");
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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 )


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Qbexus
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


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





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

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


a możesz pokazać jak wyglądeją te duplikaty (najlepiej na zrzucie)? name jest UNIQUE więc nie powinno ich być...
Go to the top of the page
+Quote Post
Qbexus
post
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


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?

Ten post edytował Qbexus 31.08.2008, 21:32:15
Go to the top of the page
+Quote Post
szopen
post
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

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


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





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


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'
Go to the top of the page
+Quote Post
szopen
post
Post #12





Grupa: Zarejestrowani
Postów: 60
Pomógł: 5
Dołączył: 28.08.2008

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


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\' ?
Go to the top of the page
+Quote Post
Qbexus
post
Post #13





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Dzięki sprawa załatwiona.
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 Aktualny czas: 19.08.2025 - 10:17