ArnisR Posted February 25, 2011 Report Share Posted February 25, 2011 (edited) Tātad MySQL datubāzē ir divas tabulas - viena ar kategorijām, otra ar sub-kategorijām. 1. tabulas datu lauki: ID - CATEGORY_NAME 2. tabulas datu lauki: ID - SUBCATEGORY_NAME - CATEGORY_ID Nepieciešams šo informāciju izvadīt pēc šāda principa: Kategorija 1 Subkategorija 1 Subkategorija 2 Subkategorija 3 Pārējās subkategorijas, kas atbilst kategorijai 1 ... Kategorija 2 Subkategorija 1 Subkategorija 2 Subkategorija 3 ... Kā to var panākt ar PHP? Paldies! Edited February 25, 2011 by ArnisR Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 25, 2011 Report Share Posted February 25, 2011 <?PHP $q = mysql_query("SELECT * FROM `kategorijas`"); while ($res = mysql_fetch_object($q)) { echo $res->CATEGORY_NAME . ':<br/>'; $sub = mysql_query("SELECT * FROM `subkategorijas` WHERE `CATEGORY_ID`='" . $res->ID . "'"); while ($sub_res = mysql_fetch_object($sub)) { echo $sub_res->SUBCATEGORY_NAME . ':<br/>'; } } ?> Quote Link to comment Share on other sites More sharing options...
codez Posted February 25, 2011 Report Share Posted February 25, 2011 Vispār jau to var vienkārši panākt arī ar vienu kveriju: $db=new Mysqli('localhost','root','','test'); $res=$db->query('SELECT * FROM cat LEFT JOIN subcat ON cat.id=subcat.CATEGORY_ID ORDER BY cat.id ASC'); $catid=Null; while ($row=$res->fetch_assoc()){ if ($catid!=$row['CATEGORY_ID']){ echo $row['CATEGORY_NAME'].'<br />'; $catid=$row['CATEGORY_ID']; } echo $row['SUBCATEGORY_NAME'].'<br />'; } Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 25, 2011 Report Share Posted February 25, 2011 Šeit viens no MySQL vecākajiem inženieriem paskaidro, kas ir datubāžu dzinējs un to, ka datu bāze ir paredzēta datu glabāšanai, ne apstrādei. Quote Link to comment Share on other sites More sharing options...
yancho Posted February 25, 2011 Report Share Posted February 25, 2011 Šeit viens no MySQL vecākajiem inženieriem paskaidro, kas ir datubāžu dzinējs un to, ka datu bāze ir paredzēta datu glabāšanai, ne apstrādei. Tik dziļi zemtekstos noslēptu vēstījumu par MySQL sen nebiju redzējis :D Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted February 25, 2011 Report Share Posted February 25, 2011 <?PHP $q = mysql_query("SELECT * FROM `kategorijas`"); while ($res = mysql_fetch_object($q)) { echo $res->CATEGORY_NAME . ':<br/>'; $sub = mysql_query("SELECT * FROM `subkategorijas` WHERE `CATEGORY_ID`='" . $res->ID . "'"); while ($sub_res = mysql_fetch_object($sub)) { echo $sub_res->SUBCATEGORY_NAME . ':<br/>'; } } ?> Šai kodā ir vismaz 2 lietas no tām 7, par ko reiz rakstīju, kursori (BTW vēl trakāk cikls ciklā jeb kursors kursorā) un visu kolonu atlasīšana, kaut gan reāli nepieciešamas tik 2. Vismaz par to pirmo es teiktu, ka jebkurā kaut cik normālā projektā koderim būtu jādod maksimums 1 brīdinājums un iespēja pierādīt sevi, pēc otrās reizes sakot ardievas, jo pēc tam ieguldāmais darbs koda labošanā visdrīzāk stingri pārsniegs ieguvumu no konkrētā programmētāja. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 26, 2011 Report Share Posted February 26, 2011 (edited) 1. tabulas datu lauki: ID - CATEGORY_NAME 2. tabulas datu lauki: ID - SUBCATEGORY_NAME - CATEGORY_ID[/code] U mad SQL guru? Ja cilvēks pasaka, ka jamam ir 2 datu lauki no kuriem 2 ir nepieciešami 1. gadījumā, vai man ir tiesības jamo apšaubīt? 2. gadījumā, tik tiešām, varēja fečot kolonnas. TEORĒTISKI. Lai gan probably ja šams veidotu linkus uz subkategorijām, pieņemu, ka jamam būtu nepieciešamas visas 3 no 3 kolonnām. Labākajā gadījumā divas. Tātad tukša bikšu kulšana, ja vajag visas kolonnas, paņem visas kolonnas. Oponē man. Par nestotajām query- <?PHP /* SQL, autoģenerēts, stfu/gtfo CREATE TABLE IF NOT EXISTS `nested-menu` ( `id` int(10) NOT NULL AUTO_INCREMENT, `childof` int(10) DEFAULT '0', `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; */ $act = mysql_query("SELECT * FROM `nested-menu`"); ///Problem, SQL guru? $menu = array(); $menu_sub = array(); while ($res = mysql_fetch_object($act)) { #Ja childof = 0, šī ir master kategorija if ($res->childof == 0) { $menu[$res->id] = $res->name; } else { #Probably child kategorija $menu_sub[$res->childof][] = array( $res->id, $res->name ); } } #OMMG FOREACH!111!!!111 foreach ($menu as $id => $name) { # $id = kategorijas id # $name = kategorijas nosaukums echo $name . '<br/>'; if (isset($menu_sub[$id])) { foreach ($menu_sub[$id] as $subid) { # [0] = subkategorijas id # [1] = subkategorijas nosaukums echo '-'.$subid[1] . '<br/>'; } } } ?> Ir piektdienas nakts, man ir lieliska vīna pudele un nē, tev nav man jāaizrāda par foreach un masīviem :D SQL guru gribēja optimizēt SQL? Just did. ija 2 tabulas, tagad ir viena, bija 5 kolonnas, tagad ir 3. Nedaudz vairāk PHP, bet whatevs. 2011. Un par to max 1 brīdinājumu gan sanāca smiekli. No offense SQL guru, esmu rakājies pa tavu blogu un priecē, ka dalies ar savām zināšanām, kā arī nenoliedzami neesi caur palagu ar slapju pirkstu taisīts. Bet tā attieksme, ak vai.. Edited February 26, 2011 by F3llony Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 26, 2011 Report Share Posted February 26, 2011 Attieksme... Kāpec Tu nevari atzīt Savas kļūdas, programmēšanas ekspert? Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 26, 2011 Report Share Posted February 26, 2011 Attieksme... Kāpec Tu nevari atzīt Savas kļūdas, programmēšanas ekspert? Vai cienītais studenta jaunskungs nenorādītu, kuras tieši un nepamatotu kāpēc tieši šīs studenta jaunskungs uzskata par kļūdām? :) Quote Link to comment Share on other sites More sharing options...
m8t Posted February 26, 2011 Report Share Posted February 26, 2011 Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 26, 2011 Report Share Posted February 26, 2011 http://php.lv/f/topic/18352-izvade-no-mysql/page__view__findpost__p__143526 http://php.lv/f/topic/18352-izvade-no-mysql/page__view__findpost__p__143552 )) Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 26, 2011 Report Share Posted February 26, 2011 Es tev prasīju norādīt uz manām kļūdām un PAMATOT kāpēc tieši šīs būtu kļūdas TAVUPRĀT. es neprasīju citēt citus lietotājus. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 26, 2011 Report Share Posted February 26, 2011 Manuprāt nav jēga atkārtoties... Quote Link to comment Share on other sites More sharing options...
Rincewind Posted February 26, 2011 Report Share Posted February 26, 2011 (edited) Es tev prasīju norādīt uz manām kļūdām un PAMATOT kāpēc tieši šīs būtu kļūdas TAVUPRĀT. es neprasīju citēt citus lietotājus. Kas tur ko pamatot, kāda jēga glabāt uz servera divas temp tabulas un ņemt katrā pieprasījumā pa vienai rindai (pietam kā objektus)? Paņemt uzreiz visu un miers, nebūs jau tur gigabaitu rezultāti. Edit: Kaut gan, pag. No kurienes tur kursori uzradīsies? mysql_query tak atdod visus rezultātus atpakaļ, fetch tak uz serveri vairs nelīdīs? Edited February 26, 2011 by Rincewind Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 26, 2011 Report Share Posted February 26, 2011 Loģiski, ka nekādu mysql kursoru tur nav. Es gan nebiju šo tik dziļi pētījis, jo nebija nekādas intereses tieši par šo funkciju, bet izrādās, php mysql paplašinājums tik tiešām kopē mysql query atgriezto resultsetu lokālā atmiņā, kurā tad pēcāk arī tiek īstenots fetch loops. Kas ir loģiski. Rincewind->karma++; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.