Autor Zpráva
*Čvachta*
Profil *
function zobraz_nejnovejsi()
{
$sql = "SELECT MAX(id), text FROM brcal;";
$dotaz = mysql_query($sql);
$clanek = mysql_fetch_array($dotaz);
echo $clanek["id"];
};

Co je špatně? Já tu funkci max nechápu !
- prostě potřebuju najít největší ID v tabulce a zaroven taky nacist do pole sloupec text
SuE
Profil
google is your friend :-)

Select cosi from table order by id desc limit 1

ale optimalizované to teda moc není, jestli ta tabulka je velká, tak to bude muset být něco jiného ... buď poddotaz , což asi nejde, nebo to rozdělit na dva dotazy - napřed vybrat tu max id a potom tu hodnotu použít v následujícím dotazu přímo.
Totiž, když děláš to, co děláš, tak on vybírá max id pro každý ten "text" .

ten dvojitý dotaz by byl něco jako : select max(id) from blabla ... šup s tím do proměnné v php
a potom select cosi from blabla where id = ta_hodnota

a pak by to mohlo jít přes user variables ale to ať radši nějaký mysql odborník, já to našla jen tu :
http://www.programmershelp.co.uk/mysqlcommon.php

btw, já v mysql nedělám ale zkouším se to tímhle naučit .. něco jako luštění křížovky, takže bez záruky :-)
T3RMiX
Profil
připojuju se k SuE nejsem žádnný odborník na mySQL ale proč to komplikovat, prostě si vyber jen jednu položku a seřaď podle Id Desc a je to ne?

function zobraz_nejnovejsi()
{
$dotaz = mysql_query("SELECT id, text FROM brcal ORDER BY id DESC LIMIT 1");
$clanek = mysql_fetch_array($dotaz);
return $clanek["id"];
//pripadne echo $clanek["id"];
};
Yuhů
Profil
já teda daky nevím, ale myslím, že když se po MySQL chce max(id), tak se nemůže zároveň chtít text. To už se pak asi musí řešit složeným dotazem:

SELECT text FROM brcal WHERE id=(SELECT max(id) from brcal)

netestováno, ale ten výše zmiňovaný ORDER BY mi přijde zoufale neoptimalizovanej, zejm. u větších tabulek. Tam se řadí spousta záznamů, abych si z toho vzal jenom jeden.
*Čvachta*
Profil *
Díky !Zkusim
Honza Hučín
Profil
Ad Yuhů: Ano, to je ten důvod, proč to nefunguje. Řešení s poddotazem je OK, ale bohužel funguje jen od MySQL verze 4.1, což není na všech serverech samozřejmostí. Pro nižší verze se to musí řešit rozdělením na dva dotazy, anebo přes ORDER BY.
Jinak pro obecný problém vypsání N-tého záznamu viz
http://suplik.petnik.cz/index.php?cl=223
SuE
Profil
to Honza Hučín: já už se tě někde ptala,( asi to zapadlo) ale proč se skoro nevyužívá temp tabulek?
select neco into temp a potom další select ... from temp .... ?
tady je to třeba blbost s tou jednou hodnotou, ale když by jich bylo víc ...
Honza Hučín
Profil
Ad SuE: Já tedy TEMPORARY TABLE využívám - v Šuplíku při výpočtu nejčtenějších článků. Nemám bohužel přehled, jak je kdo využívá. Možná je to proto, že lze používat poddotazy. A poddotaz je IMHO rychlejší. Samozřejmě problém kolegy Čvachty se dá řešit i pomocí TEMPORARY TABLE, i když souhlasím, že je to s kanonem na vrabce.
SuE
Profil
HH: huh, teď jsi mě zmátl .. lze využívat poddotazy .. nelze ? Nebo ty máš už tu novější verzi MYSQL?
IMHO by mohl temp být rychlejsí než složitější výběry/poddotazy z více tabulek, ale ... záleží na databázi :-)
Honza Hučín
Profil
Promiň, špatně jsem se vyjádřil. Používám TEMPORARY TABLE právě proto, že nemůžu používat poddotazy kvůli nízké verzi MySQL. Jinak bych použil poddotaz.
Malou četnost používání TEMPORARY přičítám tomu, že hodně lidí může úlohu řešit poddotazem. A to se mi zdá rychlejší, je to ale jen můj odhad.
*Čvachta*
Profil *
A jak se to tedy dá v starší MySQL udělat 2ma dotazama?
*Čvachta*
Profil *
function zobraz_nejnovejsi()
{
$sql_id = "SELECT max(id) from brcal;";
$dotaz_id = mysql_query($sql);
$id = mysql_fetch_array($dotaz_id);
$sql_text = "SELECT text FROM brcal WHERE id=".$id["max(id)"].";";
$dotaz_text = mysql_query($sql);
$clanek = mysql_fetch_array($dotaz_text);
echo $clanek["text"];
};

takhle to nefacha
*Čvachta*
Profil *
Sorry uz to mam dobre:
function zobraz_nejnovejsi()
{
$sql_id = "SELECT max(id) from brcal;";
$dotaz_id = mysql_query($sql_id);
$id = mysql_fetch_array($dotaz_id);
$sql_text = "SELECT text FROM brcal WHERE id=".$id["max(id)"].";";
$dotaz_text = mysql_query($sql_text);
$clanek = mysql_fetch_array($dotaz_text);
echo $clanek["text"];
};
Toto téma je uzamčeno. Odpověď nelze zaslat.