ALTER TABLE ADD UNIQUE - php težave

Evo,spet nova težava...

Skratka, pri uvozu ponudb preko xml-ja na stran moram nekako določiti neko sprejemljivko ki ima unikatno vrednost, zato da ko ponovno uvozim xml, ki je medtem že spremenjen (dodane nove ponudbe, ni več pretečenih ponudb,nekatere so enake kot prej) ne uvozi istih ponudb še enkrat ker so potem podvojene...Probal sem z id ampak je ta v bazi že določen in ga ne morem spreminjati,nato sem dodal novo polje id_ponudbe, nastavil na VARCAHAR, in poizkusil ALTER TABLE ADD UNIQUE a sql vrže ven napako:

ALTER TABLE class_ads ADD UNIQUE (
id_ponudbe
)

MySQL je vrnil: Dokumentacija
#1069 - Too many keys specified; max 64 keys allowed

Ima kdo kakšno idejo/predlog kako rešiti ali to težavo,ali pa drugačno rešitev za to da pri uvozu ne bom vnašal istih ponudb, ali pa da jih vsaj prepišem.

lp

11 odgovorov

Ja, na eni tabeli maš lahko največ 64 indexov.

Res ne vem kako ti je to ratalo, jst ne pridem nikol niti blizu temu limitu.

Če hočeš več, lahko skompajlaš mysql iz sorsa, baje je datoteka sql/unireg.h, konstanta MAX_KEY. Dej na recimo ene 100, pač kokr rabiš.

2

Hvala za odgovor...Samo še vedno ne razumem najbolje...Nisem namreč strokovnjak za baze (bolj totalni laik..) kaj pomeni "Ja, na eni tabeli maš lahko največ 64 indexov"

hvala...

Še to...kaj sploh predstavljajo indexi...da si bom bolje predstavljal?

Hmm v xml dodaj idponudbe in v MySQL dodaj idponudbe (INT oboje), ne rabi biti UNIQUE. Nato samo gledaš ali se idponudbe v xml ujema z idponudbe v bazi.Če se ujema, ne vpišeš ponudbe v bazo, če pa se ne ujema pa ponudbo vpišeš.

To je če lahko xml dopolniš, če ga ne moreš glej po imenu ponudbe oz. kaj bi bilo čimbolj uniq.

Lahko urejam xml...samo kako potem preverim če je enako?

Index = kazalo

Idekse postavljamo na bazo, zato da se poizvedbe na bazo hitreje izvajajo (+ še drugi razlogi), v resnici čista analogija kazala v telefonskem imeniku.

Problem je "overindexing", to pomeni, da kaki newbi postavijo index povsod, čeprav ga sploh ne rabijo, kar ima obraten učinek, upočasnjevanje, kadar se podatke na bazi popravlja + ogromno prostora porabijo te indeksi.

Mislim, če kdo dejansko rabi 64 indexov je to lahko samo v primeru, da se dela data warehousing tip zvezda. Ne pa pri neki simpl aplikaciji. Vse indexe si lahko enostavno ogledaš v kakem phpMyAdminu.

1

edin index kaj rabiš je ta,.... s katerim boš iskal... ponudbe v bazi :D

1

Hvala za bološo razlago...sej pravim,nimam pojma o bazah...Samo ni mi jasno,polje lahko vpišem v bazo,ne morem pa spremenit v unique?

Čeprav ni ravno pomembno,bom verjetno upošteval Metallonov nasvet, me pa vseeno zanima v čem je štos.

Mogoče pokažeš.. kako imaš zgrajeno podatkovno bazo ?

werky:
Lahko urejam xml...samo kako potem preverim če je enako?

Vzameš ponudbaid iz xmlja.
$result=mysql
query("SELECT * FROM ponudbe WHERE ponudbaid=$ponudbaidxml LIMIT 1");
mysql
num_rows($result);

če je mysqlnumrows>0 pomeni da je ponudba že vpisana in je pač ne vpišeš

1

Metallon:
Hmm v xml dodaj idponudbe in v MySQL dodaj idponudbe (INT oboje), ne rabi biti UNIQUE. Nato samo gledaš ali se idponudbe v xml ujema z idponudbe v bazi.Če se ujema, ne vpišeš ponudbe v bazo, če pa se ne ujema pa ponudbo vpišeš.

To je če lahko xml dopolniš, če ga ne moreš glej po imenu ponudbe oz. kaj bi bilo čimbolj uniq.

Ammm,kako pa to dosežem?

Sem ti 1 post višje napisal enostavno kodo.