Dvojitý výpis na jeden dotaz

Ahoj, chtěl bych se zeptat a poprosit o radu, jak se jednou na něco dotázat databáze a pak vícekrát vypsat výsledky viz:

$dotaz = mysql_query("select atd. atd..);
while ($vysledek = mysql_fetch_array($dotaz))
{
echo $vysledek[0];
}
while ($vysledek = mysql_fetch_array($dotaz))
{
echo $vysledek[0];
}

..bohužel si nejsem schpnej odůvodnit proč tohle nejde, moc by mi to pomohlo, DÍKY MOC
Třeba:
$data = Array();
$sql = 'SELECT `cokoliv` FROM `odkudkoliv` WHERE `cokoliv`="čemukoliv"';
$query = MySQL_Query($sql);
while($vysledek = MySQL_Fetch_Array($query,MYSQL_ASSOC)) {
print_r($vysledek);
$data[] = $vysledek
}
for($i=0;$i<count($data);$i++) {
print_r($data[$i]);
}

Nebo by potom mohlo teoreticky jít to, že by jsi resetoval pozici ukazatel v poli query a prošel to pomocí toho while jak jsi zoušel ty.
zkus před tím druhým cyklem while dát znova příkaz:
$dotaz = mysql_query("select atd. atd..);
ObiWan: a proč by jako měl znovu tahat všechny data z databáze a ubírat si počet datazů/hod, když už je jednou má natažený?
Jo jo, nakonec sem to nacpal do toho array, dík. Nechtěl sem to dělat, protože pro každej řádek sem potřeboval dvě políčka. Dávat dotaz pokaždý znova sem nechtěl, páč by šlo opřibližně několik set dotazů :) V reálu to mělo umět vzít příspěvek a slovo po slovu zkontrolovat, jestli to slovo neni popsany v tabulce s technickejma výrazama. Pro zajímavost to dopadlo takto : ..a zcela funkčí (kupodivu)


function spoj_se_slovnikem($text) {

$q_slovnik = mysql_query("select id, vyraz from technicky_slovnik",$link);
while ($r_slovnik = mysql_fetch_array($q_slovnik))
{
$vyrazy .= "###".$r_slovnik[id]."##".$r_slovnik[vyraz];
}

$pole=explode(" ", $text);
$vyrazy=explode("###", $vyrazy);

foreach ($pole as $slovo)
{
$tecka = "";
if(substr($slovo, -1) == "."){$slovo = substr($slovo, 0, -1); $tecka = ".";}
$vypis = "$slovo";
$slovo = trim($slovo);
$slovo = strtolower($slovo);
foreach ($vyrazy as $vyraz)
{
$vyraz_id=explode("##", $vyraz);
$vyraz = strtolower($vyraz_id[1]);

$sluvko = substr($slovo, 0, -1);
if($vyraz == $sluvko AND strlen($sluvko) > "2"){$vypis = "<a class=\"vyraz_slovnik\" href=\"index.php?show=technicky_slovnik&id=$vyraz_id[0]\" title=\"Výraz popsaný v technickém slovníku\">$vypis</a>";}
$sluvko = substr($slovo, 0, -2);
if($vyraz == $sluvko AND strlen($sluvko) > "3"){$vypis = "<a class=\"vyraz_slovnik\" href=\"index.php?show=technicky_slovnik&id=$vyraz_id[0]\" title=\"Výraz popsaný v technickém slovníku\">$vypis</a>";}
$sluvko = substr($slovo, 0, -3);
if($vyraz == $sluvko AND strlen($sluvko) > "4"){$vypis = "<a class=\"vyraz_slovnik\" href=\"index.php?show=technicky_slovnik&id=$vyraz_id[0]\" title=\"Výraz popsaný v technickém slovníku\">$vypis</a>";}
if($vyraz == $slovo){$vypis = "<a class=\"vyraz_slovnik\" href=\"index.php?show=technicky_slovnik&id=$vyraz_id[0]\" title=\"Výraz popsaný v technickém slovníku\">$vypis</a>";}
}

echo " $vypis"."$tecka";
}
}
nejsem si jistý jestli to teď dobŕe vysvětlím, já to taky nechápu na 100%, ale:
-Při každém zavolání finkce mysql_fetch_array() se zvýší o jedno jakési jeho vnitřní poćítadlo, které udává z jakého řádku čte data. Až proběhne celý cyklus while, to počítadlo je na posledním řádku, který jsi vzal z databáze pomocí SELECT.
-Když ve druhém cyklu znova zavoláš mysql_fetch_array, tak se znova to počítadlo posune o jednu dál ale tam už nic není takže ti nevypíše nic. Tím že znova načteš data z databáze, řekneš tomu PHP aby začal číst zase od začátku...

kdyžtak mě někdo opravte jestli to i já špatně chápu ;-)
Tom: a taky proto že se mi to zdá nejjednodušší, stačí přidat jeden ŕádek navíc a fnguje to...
ObiWan: To právě ne, ty data už jednou natáhlý máš a stačí přemístit ten ukazatel řádku.. což sem pochopil teď z tohoto všeho:)
ObiWan: hmm... sice zajímavej popis, ale celkem správně. Při každém zavolání mysql_fetch_array() se posune vnitřní ukazatel pole o jedno. A až dojde na konec, tak logicky dál nemůže a skončí.
Ale ty navrhuješ načítat data znovu, což jednak zpomaluje běh skriptu, jednak při větším objemu dat hrozí zaplnění memory_limitu a tím pádem ukončení skriptu s chybou, a jednak to, že na WZ je omezený počet dotazů/hod na DB by mohlo při "neekonomickém" používání MySQL_Query() k tomu, že tě databáze odmítne a nebudeš mít data.
Já bych raději, jak jsem psal, vrátil ten vnitřní ukazatel pole zpět na začátek a potom by jsi mohl pracovat znovu s těmi stejnými daty, nebo si to rozdělit(což použi yavoo): spolu s výpisem si ty data uožím do proměnné a až vypíšu vše (vše budu mít v proměnné), tak si to z ní opět vyvolám a dalším cyklem vypíšu znovu.

yavoo: celkem dobrý, jenom bych do mysql_fetch_array přidal parametr MYSQL_NUM. Ušetříš trošku paměti ;)
Tak sem pokoukal co dělá to MYSQL_NUM a jestli sem to dobře pochopil.. v mym případě, kdy potřebuju, id(int) a vyraz(text) je to teda nepoužitelný.

A jakym příkazem prosimtě hodim ten ukazatel zase na začátek? To sem nějak nedohledal:(
Move internal result pointer (PHP 3, PHP 4, PHP 5)

bool mysql_data_seek ( resource result, int row_number )


PS: row_number zacina od 0
<HTML>Je vyhodnejsi pracovat s daty nez s ukazateli a funkcemi, notoz pak s dotazy.

yavoo: to cos vytvoril je ukazka toho jak by to prave vypadat nemelo :/

Chtel jsem to tak nejak prepsat na ukazku, ale opravdu se v tom tezko vyznat :(</HTML>