Já jsem hledal nejlepší způsob, jak načíst další a předchozí záznamy o záznamu, aniž by hrozilo úplné dotazu. Mám plně implementované řešení na místě, a chtěl bych vědět, jestli existují nějaké lepší přístupy, jak to udělat venku.
Řekněme, že jsme budování webové stránky pro fiktivní zelinář. Kromě svých HTML stránek, každý týden, chce zveřejnit seznam speciálních nabídek na jeho místě. Chce ty nabídky k pobytu ve skutečném tabulce databáze, a uživatelé musí mít možnost třídit nabídek třemi způsoby.
Každá položka má také mít detailní stránku s větší, textové informace o zakázce a tlačítek „předchozí“ a „další“. Dále jen „předchozí“ a „další“ tlačítka je třeba poukázat na sousedních položky v závislosti na třídění uživatel zvolil na seznamu .
alt textu http://www.pekkagaiser.com/stuff/Sort.gif?
Je zřejmé, že tlačítko „Další“ pro „Rajčata, Class I“ musí být „Jablka, třída 1“ v prvním příkladě, „hrušky, třída I“ ve druhém, a nemá v třetí.
Úkolem v detailním pohledu je určit další a předchozí položky, aniž by hrozilo pokaždé dotazu s pořadí řazení seznamu jako jediný dostupný informací (řekněme, dostaneme, že prostřednictvím parametru GET ?sort=offeroftheweek_pricea ignorovat bezpečnostní důsledky) ,
Je zřejmé, že prostě absolvování identifikátory další a předchozí prvky jako parametr je první řešení, které přijde na mysl. Koneckonců, už víme, IDs v tomto okamžiku. Ale to není zde možnost - to bude fungovat v tomto zjednodušeném příkladu, ale ne mnoho mých případů použití v reálném světě.
Můj současný přístup v mém CMS používá něco, co jsem s názvem „třídění vyrovnávací paměť“. Při načtení seznamu I ukládat položky pozice v záznamech v tabulce s názvem sortingcache.
name (VARCHAR) items (TEXT)
offeroftheweek_unsorted Lettuce; Tomatoes; Apples I; Apples II; Pears
offeroftheweek_price Tomatoes;Pears;Apples I; Apples II; Lettuce
offeroftheweek_class_asc Apples II;Lettuce;Apples;Pears;Tomatoes
Je zřejmé, že itemssloupec je skutečně naplněna číselných identifikátorů.
Na stránce s podrobnostmi, teď přistupovat příslušný sortingcachezáznam, načíst itemssloupec, explodovat to, hledat aktuální číslo položky a návrat na předchozí a následující souseda.
array(current => Tomatoes,
next => Pears,
previous => null
);
To je samozřejmě dražší, pracuje pro omezený počet pouze záznamy a vytváří redundantní data, ale předpokládejme, že v reálném světě, dotaz k vytváření seznamů je velmi drahé (je to), běží to v každém detailu je mimo otázkou, a některé je třeba cache.
Moje otázky:
Myslíte si, že je to dobré praxe zjistit sousední záznamy pro různé dotazu příkazy?
Víte, lepší postupy z hlediska výkonu a jednoduchosti? Víte něco, co dělá to naprosto zastaralé?
V teorii programování, je tam název pro tento problém?
Je název „Třídění cache“, je vhodné a srozumitelné pro tuto techniku?
Existují nějaké uznávané, běžné způsoby, jak vyřešit tento problém? Co říkali?
Poznámka: Moje otázka není o budování seznamu, nebo jak zobrazit detailní pohled. To jsou jen příklady. Moje otázka je základní funkce určování sousedy záznamu, když re-query je nemožné, a nejrychlejší a nejlevnější způsob, jak se tam dostat.
Pokud je něco nejasné, prosím zanechat komentář a budu objasnit.
Spuštění odměnu - možná je trochu více informací o této venku.














