Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP mysql insert, osa ridu kadunud märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
raido357
HV veteran

liitunud: 26.09.2002




sõnum 08.12.2009 02:17:02 PHP mysql insert, osa ridu kadunud vasta tsitaadiga

Tere

Mure nimelt selles, et ei saa hakkama andmete sisestamisega.

Hetkel siis midagi stiilis

foreach($key => $value) {
$insert->query("Insert into tabel vaartused");
}

Üritan lisada 25 000 rida sedasi, mis muidugi feilib, lisatakse ainult 24990 rida. Ideaalne oleks, kui saaks 100 000 rida korraga insertida, algselt oli lahenduseks LOAD DATA LOCAL INFILE aga teises serveris see keelatud ja ei lubata ka suht kindlalt.

100 000 korral läheb juba mõned tuhanded kohati kaduma. LOAD DATA variandiga ei läinud midagi kaduma.

Olen ka grupide kaupa inserte teinud, ala 100 INSERTI korraga - tulemus on suht sama.

Kuidas sellist asja lahendada ?
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 08.12.2009 02:28:31 vasta tsitaadiga

Uurid ehk välja et mis queryd failivad ja miks?
http://php.net/manual/en/function.mysql-error.php
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
raido357
HV veteran

liitunud: 26.09.2002




sõnum 08.12.2009 17:28:33 vasta tsitaadiga

Sain oma 25000 rida sisse lastud, siis kui võtsin UNIQUE väärtuse maha, kaks tulpa oli UNIQUE lükatud.

Mis on mõistatud muidugi, kuna kuidas saab kaks ühesugust väärtust tekkida, kui mõlema tulbal on väärtused erinevad

UNQIUE(number, group_id);

number väärtused 0-24999 ja grupp näiteks 50, või 51 jne.

Põhimõtteliselt võib asi ka ilma UNQUE'ta jääda, kuna PHP sorteerib ise ka UNIQUE väärtused välja.

Edit: oleks vaja tegelt mysql unique tööle saada, sest uuesti insertides, oleks vaja siiski vältida korduvaid andmeid ja php'ga seda nüüd kontrollima hakata, on tulemuseks execute time exceeded.
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 11.12.2009 16:33:37 vasta tsitaadiga

Kahe välja peale pandud unique key tööpõhimõte on teine kui sa arvad. See ei tähenda et andmebaas vaatab et kas väli1 == väli2 ja kui on samad siis annab errorit.
Töötab asi nii, et andmebaas vaatab kas väli1 ning väli2 kombinatsioon on unikaalne, ehk kas on olemas mõni rida kus väli1 väärtus on sama mis praegu sisestada proovitaval real ning kas ka väli2 on sama.

Kui sul on tabelis rida kus number=123, group=123 siis see on korrektne rida.
Kui sa sinna üritad sisestada uut rida kus ka number=123 ja group=123 siis saad errorit.

Sama errorit saad ka siis kui vastavad numbrid oleks 123456 ja 3543.

Analüüsi neid üleliigseid ridasid et mis read need on ja miks nad seal on, ja siis koonda need kokku teistega või kustuta ära.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
raido357
HV veteran

liitunud: 26.09.2002




sõnum 11.12.2009 17:05:28 vasta tsitaadiga

Ühesõnaga ma peaksin veel ühe välja lisama ja näiteks siis sisestavast numbrist ja gruppi numbrist tegema md5 hashi näiteks + mingine time salt, et ja unique sellele väljale määrata, et asi töötaks.

Hetkel tabel selline, mis feilib.


CREATE TABLE IF NOT EXISTS `mingi tabel` (
  `id` int(11) NOT NULL auto_increment,
  `number` varchar(255) NOT NULL,
  `group_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `number_grupp` (`number`,`group_id`),
  KEY `group_id` (`group_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


Edit: hashi väljaga sain asja lahendatud, olgu ilus või kole. Vähemalt töötab nagu vaja.
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 11.12.2009 17:12:22 vasta tsitaadiga

Eee, kui sa teed numbrist ja grupi numbrist hashi siis sinna time salt veel otsa, siis kusotsast on sul unique sinna veel vaja ? See number peakski tulema suht unique.
Mul on tunne et sa oled millesti valesti aru saanud kui üritad sellise lähenemisega unique key'd peale pressida peaasi et oleks peal.

Kas tohiks küsida mis on selle unique asja lõppeesmärk ? peaks võimaldama kiiremini leida tabelist ridasig kus number on x ja grupi id on y ? Selle jaoks sa ei pea kasutama unique key vaid sobib tavaline key.
Selline lahendust et kui asi pole unique siis niikaua mudid kuni on, on suht mõttetu värk ju ja vaadates eelnevaid postitusi siin teemas kaldun arvama et sa oled millesti jälle väga valesti aru saanud lihtsalt....

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
raido357
HV veteran

liitunud: 26.09.2002




sõnum 11.12.2009 17:16:54 vasta tsitaadiga

Seda on vaja selleks, et kümmenete sadade tuhandete telefoninumbrite seast duplikaadid kätte saada. Tegu ei ole mingise rakendusega kuhugi avalikku veebi.

Lisatakse failist, need mõned kümned, sajad tuhanded read korraga.

PHP'ga neid filtreerida on suht piin.
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 11.12.2009 17:52:30 vasta tsitaadiga

No sellisel juhul oleks pigem võibolla etem teha niipidi, et enne sisse lugemist unique key maha võtta. Siis välja sorteerida duplikaadid:
select group_id,number,count(*) n from tabel group by group_id,number having n>1 order by n desc
Ja siis saadud tulemuse järgi teha spets loogikat: delete from tabel where group_id=x and number=y limit z kus siis z on vastava numbri duplikaatide arv-1
Ja kui duplikaadid kustutatud, paned unique key peale tagasi.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP mysql insert, osa ridu kadunud
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.