Autor Zpráva
martinenecek
Profil
Ahoj do fora,

mam takovy dotaz...

Mam databazi studenti, v ni rekneme dva zaznamy student Petr Novosad a Patrik Novak. A ted co potrebuji. Potrebuji zjistit pocet zaznamu... v tomto pripade 2 a vypsat prvne zaznam prvni to znamena Petr Novosad a pak druhy Patrik Novak podle razeni prijmeni vzestupne. Jak to udelat ? Zaznamy jsou ciselne razeny podle ID, ktere je vsak ruznocisle. Tak jak to mam nize to nechci. Tak jak to mam nize to pracuje tak, ze do promenne jmeno to ulozi obe jmena a do promenne prijmeni to ulozi obe prijmeni. Potrebuji projet vsechny zaznamy, ale jednotlive radky ulozit zvlast do promenne nejlepe pomoci cyklu for a do pole. Potrebuji prave jeste zmeni pro kazdy zaznam ono id na 1 a 2. Dekuji

$result = mysql_query ("SELECT `id` FROM `studenti`") or die ("SQL dotaz neslo provest");
$pocet_zaznamu = mysql_num_rows($result);

$result = mysql_query ("SELECT * FROM `studenti`") or die ("SQL dotaz neslo provest");
for ($counter=0;$counter<$pocet_zaznamu;$counter++) {
while($row = mysql_fetch_array ($result)) {

$prijmeni=$row["prijmeni"];
$jmeno=$row["jmeno"];

}
nightfish
Profil
select count(*) from studenti

select * from studenti order by prijmeni
martinenecek
Profil
jasne ale ja potrebuji nacist kazdy zaznamy do promenne, u teto promenne zmenit ID podle poradi prijmeni a vypsat, pote nacist dalsi zaznam do te same promenne, zase zmenit ID ted uz 2 a zase vypsat. Nebo nacist do pole a pak v cyklu zmenit ID. Nevim jak vypisovat jednotlive zaznamy v databazi, jak se posouvat. Zaznamy jsou razeny podle ID, ale ID je ruznorode. Proto by bylo fain i ID nejakym prikazem setridit v databazi treba podle prijmeni od 1 do xx ale nevim jak :(
tiso
Profil
martinenecek prečo chceš meniť id podľa radenia stĺpca? Nie je to zbytočné? Načo to potrebuješ?
martinenecek
Profil
To:

ja bohuzel potrebuji vypsat do vystupniho souboru prave zaznamy a jejich hodnoty ze sloupcu a ID musi jit od 1 do XX.... bohuzel kdyz se v databazi maze a pridavaji zaznamy, je to ID uplne rozhozene, nebo to udelat jinak, ale netusim jak. Na vystupu musi byt presne to, co potrebuji na vstupu do excel, bohuzel musi to tak byt bez dalsich uprav v excel.
nightfish
Profil
martinenecek
a co ti brání jako ID použít hodnotu řídicí proměnné cyklu? ($counter)
martinenecek
Profil
To : nightfish jenze mne ten cyklus nefunguje, jak rikam, ten cyklus se provede vzdy jen jednou. Ja nevim jak udelat nacist jeden zaznam, do ID priradit $counter cyklu a zapsat tento zaznam do vystupniho souboru a pak nacist druhy zaznam a tak pokracovat. Nevim, jak se mam posunout na dalsi zaznam, jak pristupovat do databaze vzit jeden zaznam a pak dalsi v cyklu, kdyz se nemohu o nic oprit, Nemohu ze oprit o zadny sloupec, pouze o ID databaze ktery je autoincrement ale jak rikam jsou tam ruzna ID. Mozna by mi stacil SQL dotaz, ktery setridi databazi podle prijmeni a predela ID podle razeni prijmeni od 0 do xx


$result = mysql_query ("SELECT `id` FROM `studenti`") or die ("SQL dotaz neslo provest");
$pocet_zaznamu = mysql_num_rows($result);
$pole=array();

$result = mysql_query ("SELECT * FROM `studenti`") or die ("SQL dotaz neslo provest");
for ($counter=0;$counter<$pocet_zaznamu;$counter++) {
while($row = mysql_fetch_array ($result)) {

$id=$counter;
$prijmeni=$row["prijmeni"];
$jmeno=$row["jmeno"];

$pole[$counter] = "$id;"."$prijmeni;"."$jmeno;";
FWrite ($filename, "$pole[$counter] ");



}

}

FClose ($filename);
djlj
Profil
$result = mysql_query ("SELECT * FROM `studenti`") or die ("SQL dotaz neslo provest");

$id=1;
while($row = mysql_fetch_array ($result)) {

$pole[$id] = $id.$row["prijmeni"].$row["jmeno"];
FWrite ($filename, $pole[$id]);
FClose ($filename);

$id++;
}


Jen jsem nepochopil, odkud bereš $filename.
martinenecek
Profil
To: djlj

chybi mi tam prave zainteresovany cyklus, tohle mi vypise pouze jeden zaznam z databaze, ja potrebuji projet vsechny zaznamy a tak jak pises, menit ID a zapisovat jednotlive zaznamy do souboru.

$filename mam definovano pred touto problematikou, ale do souboru mi to uklada..alespon neco :( tak poradi nekdo presneji ? dekuji za kazdou radu.
djlj
Profil
martinenecek
Toto nevypíše jeden záznam z databáze, ale všechny.

Ještě jsem to teď trochu poupravil, zkus to.
martinenecek
Profil
To: djlj

bohuzel to vypisuje pouze jeden zaznam stale... tohle resim od sameho zacatku i kdyz jinak :) proste se nedokazu posunout na dalsi zanam. Vyresil jsem to cyklem for, ale ten se chova nekorektne.
djlj
Profil
martinenecek
A co vrací echo mysql_num_rows($result);?
martinenecek
Profil
To: djlj

vraci cislo 2, protoze v databazi mam cvicne 2 zaznamy.. dva studenty, takze tady chybka neni...
djlj
Profil
martinenecek
V tom případě i ten cyklus while bude proveden 2x. Není problém v tom, že pokud je již soubor vytvořen, script nemá práva do něj znovu zapisovat?
tiso
Profil
ja to vidím tak že zápis do toho súboru musí byť mimo cyklu...
$id=1;

$out='';
while($row = mysql_fetch_array ($result)) {
$out.=$id.$row["prijmeni"].$row["jmeno"];
$id++;
}
FWrite ($filename, $out);
FClose ($filename);


okrem toho dúfam že ten for cyklus tam už nepcháš, je celkom zbytočný...
martinenecek
Profil
To: tiso

problem bohuzel nevyresen tohle do souboru vypise pouze cisla 12 a nic vice :(
nightfish
Profil
martinenecek
shrňme si to
1) potřebuješ zjistit počet řádků tabulky
2) potřebuješ z této tabulky vypsat postupně všechny řádky, přičemž je chceš postupně očíslovat (od 1 dál)
3) potřebuješ takto zjištěná data vložit do souboru

ad 1) k tomu jsme se dobrali

ad 2) napiš, jaká je struktura tabulky - tzn. jaké má sloupce, jakého typu jsou ty sloupce

ad 3) tohle vyřešíme, až bude všechno ostatní fungovat
martinenecek
Profil
ok.. takze databaze studenti/tabulka studenti.... v ni sloupce:


id int(5) auto_increment
prijmeni varchar(20)
jmeno varchar(20)


jinak je tam dalsich 35 sloupcu, vsechny typu var, varchar, integer, asi je zbytecne je zde vsechny vypisovat. Staci mi funkcnost na tyto 3 sloupce, pak to bude fungovat na vse. Do souboru jich potrebuji vypsat kolem 10. Ale problem neni ve vypisu sloupcu, spise vhodne umistit cyklus. Ten muj puvodni kod funguje, vypise to vsechny databazove zaznamy korektne, ale nezmeni id, protoze cyklus for se vykona pouze jednou a tudiz $counter je vzdy 0 nebo 1 podle podminky. Potrebuji nejak tomu while rict, vypis pouze jeden zaznam tabulky, a cyklu for rict prepni se na dalsi zaznam v tabulce zvys $counter a tento $counter uloz do ID. Vsechny zaznamy ulozit nejlepe do $pole[$counter] a pak ulozit do souboru. Nevim, jestli je to takhle mozne. Vnitrni while mi funguje, dokud je co z tabulky vypisovat, ale vypise vsechno. Jeste me napadlo prepsani ID do databaze od 1 do xx a pak bych si to bral z databaze dotazem, kde bude podminka a cyklus na ID. ale nevim, jak zaznamy setridit podle prijmeni tak, ze prijmeni bude vzestupne a id bude k temto zaznamu prinalezet take vzestupne. Jestli to resi Update nebo neco podobneho ?
nightfish
Profil
zkus tohle... jediná potřebná úprava je doplnění připojení k databázi na úplný začátek
$result = mysql_query("select count(*) from studenti");

if (!$result) Die(mysql_error());
else $pocet = mysql_result($result, 0, 0);
$fp = fopen("vystupniSoubor.txt", "w");
if (!$fp) Die("Nepodařilo se otevřít soubor");

$result = mysql_query("select prijmeno, jmeno from studenti order by studenti");
if (!$result) Die(mysql_error());
$pocet = 0;
while ($data = mysql_fetch_row($result)) {
$pocet++;
list($prijmeni, $jmeno) = $data;
$vysledek = "$pocet;$prijmeni;$jmeno";
echo $vysledek."<br>";
fputs($fp, $vysledek);
}

fclose($fp);
tiso
Profil
martinenecek tak potom: mysql_fetch_array zmeň na mysql_fetch_assoc v tom mojom skripte...
martinenecek
Profil
Dekuji vsem podle scriptu od nightfish to uz funguje, jen musim pokoumat, jak si to vlastne udelal :)
Toto téma je uzamčeno. Odpověď nelze zaslat.