Mám zásadní problém, při selectu kombinovaném se řazením podle ID se mi nevypisuje jeden záznam (u vzestupného řazení první položka databáze, u sestupného řazení poslední položka databáze). Když nechám vypsat položky databáze v PHP adminu, objeví se informace "Zobrazeny záznamy 0 - 53 (54 celkem, Dotaz zabral 0.0012 sekund)". Něco mi říká, že by problém mohl být v rozdílu mezi uvedenými čísly 53 a 54. Předpokládám, že mám nějak doprasená ID, jenom nevím jak. Nesetkali jste se s tím?
Pro doplnění uvádím přesné znění selectu:
select *, DATE_FORMAT(Datum,'%d.%m.%Y') as Datum from novinky order by ID
a vlastnosti sloupce ID v databázi:
Typ: int(11)
Nulový: Ne
Extra: auto_increment
sloupec je zároveň primárním klíčem i indexem
Tak tenhle dotaz jsem nepochopil.
Ty soudíš, že ti chybí jeden záznam ve výpisu na základě téhle hlášky, kontrétně že 53 není rovno 54?:
Zobrazeny záznamy 0 - 53 (54 celkem)
Já nevím, ale když vypíšu záznamy číslo 0 až 53, tak jich vypíšu 54, tedy všechny.
Když vypíšu záznamy 0 až 2 tak taky nevypíšu jen dva, ale tři (0, 1, 2).
Jo, ale když pomocí echa:
while ($zaznam=MySQL_Fetch_Array($vysledek)):
?>
<?echo $zaznam["Datum"]?> <?echo $zaznam["Novinka"]?><br><br>
<? endwhile; ?>
nechám vypsat vyselektované záznamy, tak jeden chybí.
Ten SQL dotaz je primitivní, není důvod, proč by tam jeden záznam chyběl. Tak už psal Tom, akorát se to počítá od nuly. Jestliže máš ID auto_increment, těžko je doprasíš.
Pro jistotu si zobraz:
echo mysql_num_rows($vysledek);
A uvidíš, kolik řádků ti dotaz vrátil.
Zobrazí se správně číslo 54, takže bude spíš problém v tom výpisu přes echo, ale připadá mi to tak jednoduché, že si nedovedu představit, v čem může být chyba. V každém případě mi to v prohlížeči vypisuje jenom 53 záznamů, přestože by mělo 54.
Html "žere" některé znaky, třeba mezery, nebo tagy a tudíš je v prohlížeči neuvidíš. Pak je třeba se podívat do zdrojového kódu stránku (ve Firefoxu Ctrl + U).
Zkus zverejnit kod od selectu po konec while...
Je to takhle:
mysql_select_db(SQL_DBNAME);
$vysledek=mysql_query("select *, DATE_FORMAT(Datum,'%d.%m.%Y') as Datum from novinky order by ID");
$zaznam=mysql_fetch_array($vysledek);
echo mysql_num_rows($vysledek);
while ($zaznam=MySQL_Fetch_Array($vysledek)):
?>
<?echo $zaznam["Datum"]?> <?echo $zaznam["Novinka"]?><br><br>
<? endwhile; ?>
tohle vypada rozumne, az na to neustale zacinani a ukoncovani php..
a neni nejaky radek prazdny? (null, null) ?
to bys nic nevidel, zkus to treba takto:
while ($zaznam = mysql_fetch_array($vysledek)) {
echo "-".$zaznam['datum']." - ".$zaznam['novinka'];
}
treba to pak bude jasne.
Zase to vyhodilo o jeden záznam míň. Dokonce jsem zkusil udělat novou tabulku se stejnými sloupci, ale pro přehlednost pouze se třemi záznamy. Výsledkem je, že mi to vypisuje počet záznamů v databázi: 3, ale samotný výpis záznamů zobrazí pouze dva z nich.
Pokud stále používáš tento skript, tak je to jasné:
mysql_select_db(SQL_DBNAME);
$vysledek=mysql_query("select *, DATE_FORMAT(Datum,'%d.%m.%Y') as Datum from novinky order by ID");
$zaznam=mysql_fetch_array($vysledek); +++TADY TO VYTAHNES, ALE NEZOBRAZIS+++KLIDNE TENTO RADEK SMAZ+++
echo mysql_num_rows($vysledek);
while ($zaznam=MySQL_Fetch_Array($vysledek)):
?>
<?echo $zaznam["Datum"]?> <?echo $zaznam["Novinka"]?><br><br>+++TADY PRIDEJ NEJAKY STATICKY TEXT, AT VIDIS I PRAZDNE RADKY+++
<? endwhile; ?>
Díky moc, už to funguje (zbi boduje). Poděkování samozřejmě patří všem.
ajo,toho jsem si nevsiml... :-)
On to totiž v prvním případě neuvedl, to se potom špatně hledá chyba ;)
Jo, ale když pomocí echa:
while ($zaznam=MySQL_Fetch_Array($vysledek)):
?>
<?echo $zaznam["Datum"]?> <?echo $zaznam["Novinka"]?><br><br>
<? endwhile; ?>
nechám vypsat vyselektované záznamy, tak jeden chybí.