Autor Zpráva
hw
Profil *
Mám tykový problém. Chci z tabulky v MySQL databázi vypisovat jednotivé objekty (záznamy), přičemž sloupce v tabulce by byly třeba id, jmeno, text. A teď potřebuji, aby když si otevřu nějaký záznam - třeba na záznam s id=15 se dostanu odkazem index.php?id=15, tak aby tam byly dvě šipky na předchozí a následující záznam. A právě tady se dostávám k jádru věci, totiž že nechci vypsat předchozí a následující záznam podle id (což je jednoduché, v tomto případě by to bylo pomocí odkazů index.php?id=14 a index.php?id=16), ale předchozí a následující záznam v abecedě. Sice by se to asi dalo udělat dalším sloupcem v tabulce, který bych upravoval podle abecedního pořadí, ale zajímalo by mě, jestli se to dá i nějak jinak. Já na to zaboha nemůžu přijít.
Díky předem za pomoc
llook
Profil
Teď si nejsem jistý, ale myslím, že operátory < a > by měly u řetězců být od toho. Ale možná to je blbost, ale za zkoušku by to stálo:
$predchozi = mysql_query('SELECT id FROM tabulka WHERE jmeno < '.$zaznam['jmeno'].';');
$nasledujici = mysql_query('SELECT id FROM tabulka WHERE jmeno > '.$zaznam['jmeno'].';');
Ale pravděpodobně máš MySQL 4.0.x, takže to bude podle anglické abecedy.
hw
Profil *
To znamená, že operátory < a > umí pracovat i s textem? Tak to jsem nevěděl. V tom případě díky moc. Co se týče anglické abecedy, to už jsem snad vyřešil... Já to tedy vyzkouším (asi to nebude hned) a případně sem napíšu, jak jsem to použil a jak to dopadlo. Tak ještě jednou díky!
SuE
Profil
ale když to podle toho textu nebude setříděné, tak se najde první menší / větší na který se narazí , nebo ne ?
IMHO, tam by měl být nějaký poddotaz , aby to vybralo max z těch menších nebo min z těch větších
hw
Profil *
Zkoušel jsem to přes phpMyAdmina a funguje to, když je SQL dotaz takto:
SELECT id FROM tabulka WHERE Jmeno > 'Jméno aktuálního objektu' ORDER BY Jmeno ASC LIMIT 1
...pro následující záznam a pro předchozí:
SELECT id FROM tabulka WHERE Jmeno < 'Jméno aktuálního objektu' ORDER BY Jmeno DESC LIMIT 1
Dokonce nemám ani problémy s diakritikou. Jinak teď už samozřejmě stačí vypsat výsledná id do odkazů.
Takže ještě jednou díky llookovi za radu, která mi mocmocmoc pomohla :-)
Jinak když už jsem u těch SQL dotazů, jaký je zhruba přijatelný počet SQL dotazů při jednom volání PHP stránky (když nepočítáme omezení jejich počtu za hodinu na některých freehostingách)?
Příklad: Kdybych třeba vybíral na jedné stránce z tabulky článek (to je první dotaz), idčka předchozího a náledujícího podle výše (to už jsou tři dotazy), související články (4 dotazy) a z další tabulky třeba komentáře (to už je 5 dotazů), tak se to může vyšplhat až na 7-8 SQL dotazů... Je to tedy takto normální a použitelné? Nemám vůbec ponětí, jak to dělají větší weby.
Díky
Honza Hučín
Profil
Ono to samozřejmě závisí na tom, kolik přístupů denně na té stránce je. U stránky s méně než nějakých 100-200 přístupů to IMHO nemá smysl řešit, tam je i 20 dotazů OK. Při tisících přístupů a více je dobré šetřit dotazy.
Proč potřebuješ na komentáře 5 dotazů? Nedá se to udělat jedním?
llook
Profil
Honza Hučín: Myslím, že to není 5 dotazů na komentáře, ale že s komentáři to už je 5 dotazů (článek, předchozí, následující, související, komentáře).

5 dotazů na stránku je v pohodě. U větších webů to je různé. Pokud mají potíže s výkonem, tak buďto nakoupí nový hardware nebo zavedou nějaké cachování, podle toho co vyjde levněji.
hw
Profil *
Honza Hučín: Díky za odpověď. S tím počtem dotazů u mě je to přesně tak, jak napsal llook. Vyjádřil sem se špatně.
llook: Rovněž díky!
Toto téma je uzamčeno. Odpověď nelze zaslat.