while znotraj whila
 
potegnime 27. jun 2011 18:48:08 Pridružen od:
20. feb 2011
76 objav
17 9 4
#1

primer kode:

query = mysqlquery ("bla bla bla");

while ($row = mysql
fetcharray($query))

{

query2 = mysql
query ("bla bla bla");

while ($row2 = mysqlfetcharray($query2))

{

print "nekaj";

}

print "nekaj";

}



bistvo je, da iz prvega query-ja vlečem neko novico, iz drugega pa želim dobiti komentarje te novice... problem je v tem, da mi prikaže le en komentar



zanima me, zakaj mi prvi while deluje pravilno in mi "printa" normalo, tako kot hočem... medtem ko mi drugi iz baze vrne samo zadnji vnos (po id-ju)



zanima me tudi, če je to normalno obnašanje, ali bi morala stvar izgledati drugače, pa imam jaz nekje v kodi napako...



vesel bi bil seveda kakšnega predloga za rešitev težave :)


všeč(0) ni všeč(0) spam(0)
 
R3B0RN 27. jun 2011 18:55:01 Pridružen od:
3. jun 2009
94 objav
35 23 2
#2

Verjetno bi rešili ali pa vsej odpisali kar nekaj problemov če bi dal tole vrstico celo ...



query2 = mysql_query ("bla bla bla");



sicer pa while v while ok, ni pa ok če delaš toliko queryev, ker ti bo že par 10 uporabnikov ubilo server :)))))


všeč(1) ni všeč(0) spam(0)
Daj liter domačega...
 
SlimDeluxe 27. jun 2011 19:39:18 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#3

Zgornji primer je čisto legalen, tako da če želiš da ti pomagamo boš verjetno moral dati dejansko kodo ki ti dela probleme.


všeč(1) ni všeč(0) spam(0)
Freelance Web Developer
 
bl4ckb1rd 27. jun 2011 20:05:49 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#4

zato pa poznamo v SQL-u join... če ti ni jasno, si poglej SQL manual: http://dev.mysql.com/doc/refman/5.0/en/join.html


všeč(1) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
rnk 27. jun 2011 20:45:21 Pridružen od:
27. avg 2010
48 objav
91 6 1
#5

Znotraj loopov se ne raje ne daje težkih IO operacij - kar query je. Nalovdaj podatke, ki jih rabiš z enim ali dvema poizvedbama in potem obdelaj dato.


všeč(1) ni všeč(0) spam(0)
 
potegnime 27. jun 2011 22:18:50 Pridružen od:
20. feb 2011
76 objav
17 9 4
#6

Tole je original koda prekopirana iz datoteke... upam da se boste znašli, ker imam baje izjemno nepregledno kodo (vsaj tako pravijo drugi)... v prvem query-ju mi dela normalno LIMIT, medtem ko v drugem javi napako... oz če ga na uporabim mi prikaže

samo enega...


$query = mysql_query ("SELECT * FROM slike LIMIT 20");

while ($row = mysql_fetch_array($query))
{
$imedatoteke = $row['imedatoteke'];
$nalozil = $row['nalozil'];
$pot = $row['pot'];
$id = $row['id'];
$like = $row['like'];
$_SESSION["id"] = $id ;

$kom_query = mysql_query("SELECT * FROM komentarji WHERE idpredmeta = '$id'");
while ($kom_row = mysql_fetch_array($kom_query))
{
$kom_id = $kom_row['id'];
$kom_komentiral = $kom_row['komentiral'];
$kom_idpredmeta = $kom_row['idpredmeta'];
$kom_komentar = $kom_row['komentar'];
$kom_potslike = $kom_row['potslike'];



$comment = "
<p><div id ='slika'>
<a href='user.php?user=$kom_komentiral'><img src='profilephotos/thumb_$kom_potslike'></a>
</div></p>

<div id ='rubrike'><p><a href='user.php?user=$kom_komentiral'>$kom_komentiral</a> - $kom_komentar</p></div>
";
}
/************************************************/
/****query za to da vem kdo je stvar naložil*****/
/************************************************/
$query2 = mysql_query ("SELECT id FROM uporabniki WHERE ime = '$nalozil'");
$row2 = mysql_fetch_array($query2);
$iduporabnika = $row2['id'];
/************************************************/
/**************query za uporabniško tabelo*******/
/************************************************/
$query1 = mysql_query ("SELECT potslike FROM uporabniki WHERE id = '$iduporabnika'");
$row1 = mysql_fetch_array($query1);
$potslike = $row1['0'];

/************************************************/

print "

<p><div id ='slika'><a href='user.php?user=$nalozil'><img src='profilephotos/thumb_$potslike' alt='$imedatoteke'></a></div>

<div id ='rubrike'><p><a href='user.php?user=$nalozil'>$nalozil</a> has published a photo:</p>


<a href='photo.php?id=$id'><img src='nalozi/objavi_$pot' alt='$imedatoteke'></a>


<a href='photo.php?id=$id'>$imedatoteke</a>


<p><a href='like.php?id=$id'>L!ke!</a> $like person !</p>


<p><u>Comments:</u></p>
$comment


<p> <form method='post' action='preveri-komentar.php?get=".$id."'>


<input type='text' name='komentar' size='25' value=''>
<input type='submit' name='submit' value=' Submit ! ' />
</form>
</p></div>_____________________________________________________________________</p>";
}
všeč(0) ni všeč(0) spam(0)
 
potegnime 27. jun 2011 22:19:20 Pridružen od:
20. feb 2011
76 objav
17 9 4
#7

PS: se mi zdi da bom mogel na novo kodo spisat :)


všeč(0) ni všeč(0) spam(0)
 
DiTi 28. jun 2011 06:11:42 Pridružen od:
3. apr 2010
324 objav
218 7 1
#8

oh ježešna.. toliko "napak" da je brez veze sploh komentirat :)



odgovor na tvojo vprašanje pa je to da vedno prepišeš $comment. če že hočeš rešit tako daj pred drugi while $comment = ""; in potem v zanki $comment .= podatki iz tabele


všeč(1) ni všeč(0) spam(0)
 
SlimDeluxe 28. jun 2011 07:15:40 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#9

Normalno da ti izpiše samo zadnjega, saj jih ne izpisuješ v zanki? Vedno spravljaš v $comment .

Vse komentarje preberi v eno tabelo (npr. $comments[] = $comment; ) in jih potem izpiši pod izpisom novice:


foreach($comments as $c)
{
// tukaj daj html kodo za komentar
}

BTW. že če imaš html v sami php skripti (in ne npr. ločeno v template file-u), predlagam alternativno php sintakso in ločitev kode na html in php bloke.


<?php foreach($comments as $c): ?>
<div>blablabla <?=$c['avtor']?>
še neka html koda...
<?php endforeach; ?>
všeč(1) ni všeč(0) spam(0)
Freelance Web Developer
 
SlimDeluxe 28. jun 2011 07:19:33 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#10

rnk:

Znotraj loopov se ne raje ne daje težkih IO operacij - kar query je. Nalovdaj podatke, ki jih rabiš z enim ali dvema poizvedbama in potem obdelaj dato.




Težkih? Če imaš pravilen design baze in ne izvajaš kompliciranih stikov med tabelami z dosti podatkov bi temu rekel vse prej kot težka IO operacija.


všeč(1) ni všeč(0) spam(0)
Freelance Web Developer
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se