scvaer Posted February 10, 2012 Report Share Posted February 10, 2012 Tātad, lai katru reizi nerakstītu query, lai iegūtu informāciju, kas tas ir par nickname, izdomāju uztaisīt funkciju: function nickname($userid){ $id = mysql_real_escape_string($userid); $query = mysql_query("SELECT * FROM `users` WHERE id='$userid'"); $nick = mysql_fetch_assoc($query); echo $nick['username']; return; } un <?php $id = $news['id']; $comments = mysql_query("SELECT * FROM `news_comments` WHERE `news_id`='$id' ORDER BY `id` DESC"); while($com = mysql_fetch_assoc($comments)) { $nick = nickname($com['author']); echo '<div class="comments"><div class="title">Posted by '.nickname($nick).'</div>'.$com['text'].'</div>'; } } ?> Un tagadiņ tas rezultāts izskatās šādi. Kā es varētu to nick uzmest tur, kur tam vajadzētu būt? Paldies jau iepriekš! :) Quote Link to comment Share on other sites More sharing options...
vertex Posted February 10, 2012 Report Share Posted February 10, 2012 Pirmkārt jau nevajag echo mainīgo, bet atgriezt šo nick name. Otrkārt kādēļ izmanto mysql_escape_string, ja vari vienkārši pārbaudīt vai tiek padots int? Bet par to kādēļ Tev šādi tiek izvadīts niks, pieļauju domu ka varētu būt vainīgs echo, jo vajag return pašu value, ja ne, tad skaties CSS. Quote Link to comment Share on other sites More sharing options...
aika Posted February 10, 2012 Report Share Posted February 10, 2012 (edited) Tieši tā - echo notiek katru reizi izsaucot funkciju - un tu to dari 2x!!! Priekš kam? echo '<div class="comments"><div class="title">Posted by '.nickname($com['author']).'</div>'.$com['text'].'</div>'; Edited February 10, 2012 by aika Quote Link to comment Share on other sites More sharing options...
aika Posted February 10, 2012 Report Share Posted February 10, 2012 bet vēl labāk būtu, ja tu palasītu par mysql join Quote Link to comment Share on other sites More sharing options...
scvaer Posted February 10, 2012 Author Report Share Posted February 10, 2012 Paldies veči, atkal jau palīzējāt! :) Pārveidoju funkciju uz šo un viss iet. function nickname($userid){ $id = mysql_real_escape_string($userid); $query = mysql_query("SELECT * FROM `KGH_USERS` WHERE id='$userid'"); $nick = mysql_fetch_assoc($query); return $nick['username'];; } Labi, tagad pastudēšu arī to mysql.join ;) Quote Link to comment Share on other sites More sharing options...
codez Posted February 10, 2012 Report Share Posted February 10, 2012 (edited) sakarā ar to, ka pašlaik paralēli iet diskusija par OOP Vs. proc., normālā FW, šis izskatītos aptuveni šādi: //kontrolerī: $this['comments']=db::q('SELECT * FROM news_comments nc LEFT JOIN users u ON u.id=nc.author WHERE id=%s ORDER BY id DESC',$newsid)->rows(); //templeitā <? foreach($comments as $com){ ?> <div class="comments"><div class="title">Posted by <?=$com['username']?></div><?=$com['text']?></div> <? } ?> Edited February 10, 2012 by codez Quote Link to comment Share on other sites More sharing options...
aika Posted February 10, 2012 Report Share Posted February 10, 2012 (edited) :) un tagad lūdzu ar paskaidrojumiem: šis masīvs 'comments' tiek dabūts no .... katram masīva 'comments' atgrieztajam elementam 'c' rādam ... ($c IMHO ir domāts $com) Edited February 10, 2012 by aika Quote Link to comment Share on other sites More sharing options...
codez Posted February 10, 2012 Report Share Posted February 10, 2012 jā $c ir $com Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted February 11, 2012 Report Share Posted February 11, 2012 Neticami, ka tāds talants, kas met līkumu tādām niecīgām kompānijām, kā facebook utml., ir pievērsies palīdzēt šādas dižas problēmas risināšanā! Autora vietā justos ļoti pagodināts... Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 11, 2012 Report Share Posted February 11, 2012 Kverijam nekādā gadījumā nav jābūt iekš kontrolera, codez! Quote Link to comment Share on other sites More sharing options...
codez Posted February 11, 2012 Report Share Posted February 11, 2012 (edited) Mr.Key, tev ir kaut kādi komplekis, vai vienkārši prasta skaudība? daGrevis, piekrītu //modelī vai ORM gadījumā pat nebūs vajadzīgs vispār: return db::q('SELECT * FROM news_comments nc LEFT JOIN users u ON u.id=nc.author WHERE id=%s ORDER BY uc.id DESC',$newsid)->rows(); //kontrolerī: $this['comments']=Model('post')->loadByID($id)->comments(); //templeitā <? foreach($comments as $com){ ?> <div class="comments"><div class="title">Posted by <?=$com['username']?></div><?=$com['text']?></div> <? } ?> Edited February 11, 2012 by codez Quote Link to comment Share on other sites More sharing options...
Kemito Posted February 11, 2012 Report Share Posted February 11, 2012 Ko funkcija "atgriež" ? - Vērtību, kā angliski būtu "atgriezt kaut ko " - "return". Tad topika sākuma funkcijā beigās ir tiaki - "atgriež", bet vaidzētu "atgriež vārdu" kur "vārdu" ir mainīgā vērtībā. Quote Link to comment Share on other sites More sharing options...
vertex Posted February 11, 2012 Report Share Posted February 11, 2012 Ko funkcija "atgriež" ? - Vērtību, kā angliski būtu "atgriezt kaut ko " - "return". Tad topika sākuma funkcijā beigās ir tiaki - "atgriež", bet vaidzētu "atgriež vārdu" kur "vārdu" ir mainīgā vērtībā. Tur bija arī tā viņa lielākā problēma ;) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 11, 2012 Report Share Posted February 11, 2012 Lielākā problēma ir cikls kurā katrā reizē tiek izpidlīts selekts pēc `WHERE user_id = :user_id`. Ceru, ka tas ir salabots. Quote Link to comment Share on other sites More sharing options...
scvaer Posted February 12, 2012 Author Report Share Posted February 12, 2012 Labi, nedaudz palasīju par sql inner join un tad sapratu, ka tik tiešām vajadzētu to izmantot, nevis to nickname funkciju. Taču, man radās pāris jautājumi arī ar šo fīču. SELECT news.author, news.text, users.nickname FROM news INNER JOIN user ON news.author = users.id vai šo var kaut kādā veidā saīsināt, lai nebūtu jāraksta visas tabulas, izmantojot to pašu zvaigznīti *. Un tālāk nesanāca arī šo fīču nekur atrast, kā šo SQ: JOIN INNER var izmantot vēl ar WHERE id='$id', jo piemetot šo klāt, nezin kāpēc man izmet expects parameter 1 to be resource, boolean given in . Atbildot uz to Mr.Key komentāru, gribētos tik teikt, ka esmu jau pagodināts par to, ka šeit dzīvoju un ar mani viss ir kārtībā, kur ta vēl par to, ka vispār par to, ka man kāds vispār palīdz ;) 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.