eregi Posted August 8, 2008 Report Share Posted August 8, 2008 (edited) Tātad īsti nezinu kā izskaidrot savu jautājumu/problēmu, bet centīšos to te uzskribilēt. Ņemu no tabulas row'a Id ārā un ik pa brīdīm kāds id ir izdzēsts - iztrūkst, piemēram. | Id | 1 2 3 5 8 Un pa cik visu laiku vajadzēja dabūt to Id ( nedrīkstēja būt tukšums ) taisījos dabūt next id. Variants, kurš strādāja bij $id = 1; $a = mysql_query("SELECT Id FROM db.table WHERE Id='$id'"); $b = mysql_fetch_array($a); if(empty($b['Name'])) { $a = mysql_query("SELECT Id FROM db.table WHERE Id>'$id'"); $b = mysql_fetch_array($a); $id = $b['Id']; } Šāds variants strādā, bet vizuāli man nepatīk, pirms tā mēģināju šādu variantu - $id = 1; $a = mysql_query("SELECT Id FROM db.table WHERE Id='$id'"); $b = mysql_fetch_array($a); while(epmty($b['Id'])) { $id++; } šāds variants izgāzās, php pēc 30 sec beidza apstrādāt skriptu. Mācoties esmu izlaidis tātad kādu php soli, bet šķiet, ka problēma bij, ka jaunais $id netika iekļauts qvērijā. pareizi? Kurš variants šādā gadījumā būtu labāks? ++ mysql_query vietā izmantoju savu funkciju - function dbQuery($line) { global $queryCount; $queryCount++; return mysql_query($line); } Tad jautājums tāds, īsa skripta beigās man sanāk, ka dbQuery ir lietots 83 reizes, vai tas ir normāli? Skripts izvelk 5 aptaujas, un attēlo jautājumus + rezultātus. ++ Sagribējās, lai mani pakritizē ( labā nozīmē ) t.i, lai iemācītos kaut ko jaunu, lai labotu kļūdas un savu programmēšanas stilu, so šeit būs divi skripti (haotiski un varbūt es varēju labāk, bet laiks neatļāva), kurus pa nakti uztaisīju vienai lapai. Tabulas pirmā tabula - votes | Id | Q | A1 | A2 | A3 | A4 | A5 | A6| Q - Jautājums. Ax - Atbilžu varianti. otrā tabula - users | Id | Name | Surname | A1 | A2 | A3 | A4 | A5 | A6 | Ax - laukos glabāju atbildes, kur x tur votes Id. so šeit pirmais skripts, kurš attēlo kopējos rez - http://paste.php.lv/7805?lang=php un šis attēlo, par, ko katrs lietotājs ir balsojis - http://paste.php.lv/7806?lang=php paldies un bye Edited August 8, 2008 by eregi Link to comment Share on other sites More sharing options...
Mr.Key Posted August 8, 2008 Report Share Posted August 8, 2008 Pēc idejas IDus nedrīkst lietot atkārtoti - ja reiz bija ieraksts ar ID 6 un viņš tika dzēsts, tad nākamais ieraksts iet ar ID 7. Tas ir tāpēc, ka datubāzē ar daudzām tabulām šāds ID jau var tikt izmantots kā norāde kaut kur citur. Ja izveidosi jaunu ierakstu ar ID 6, tad var sanākt nepareiza saistība, tas ir, zūd integritāte. Piemēram, kā tu domā, kāpēc skripts ar dažām rindām varētu darboties ilgāk par 30 sekundēm ??? (patiesībā bezgalīgi, vienkārši php pārtrauc darbu, ja redz, ka iet virs 30 sek.) Link to comment Share on other sites More sharing options...
blackhalt Posted August 9, 2008 Report Share Posted August 9, 2008 Domāju, ka tad, kad meklē to nākošo, tad beigās jāpieliek: LIMIT 1 Link to comment Share on other sites More sharing options...
Maris-S Posted August 12, 2008 Report Share Posted August 12, 2008 Īsti nesapratu ko jāpanāk, bet nākošo lielāko id varētu atras ar vaicājumu: select min(id) from tasks where id>$id Tomēr nezinu vai kaut kādā veidā mēģināt modificēt identifikatorus ir prāta darbs. Link to comment Share on other sites More sharing options...
Recommended Posts