Autor | Zpráva | ||
---|---|---|---|
hw Profil * |
#1 · Zasláno: 30. 11. 2004, 15:56:14
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 |
#2 · Zasláno: 1. 12. 2004, 02:50:37
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 * |
#3 · Zasláno: 1. 12. 2004, 07:42:00
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 |
#4 · Zasláno: 1. 12. 2004, 08:08:49
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 * |
#5 · Zasláno: 1. 12. 2004, 17:11:44
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 |
#6 · Zasláno: 1. 12. 2004, 22:18:03
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 |
#7 · Zasláno: 2. 12. 2004, 04:48:40
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 * |
#8 · Zasláno: 2. 12. 2004, 17:10:28
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! |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0