Титла: Помощ за mysql заявка при страниране на резултати Публикувано от: Naka в Dec 01, 2009, 12:10 При страниране на резултати за веб, << 1,2,3..>> имам такова заявка:
$sql="SELECT id FROM $my_table USE INDEX (category) WHERE category='$category' LIMIT $offset, $per_page"; където: $page=1,2,3,4... и т.н. $offset = (($page * $per_page) - $per_page); Данни те са групирани в 'category' като в категорията са уникални продукти всяко със собствено 'id' и се извеждат по страници. това е тривиална задача, работи си от много време, с нея нямам проблеми. Но ми трябва и обратно решение, и не мога да се сетя какво трябва да куeрито. Ако имам само 'id'-то, как мога да оределя в коя страница се намира? Например да извърти всички резултати в категорията, подредени по същия начин както в оригиналната заявка, но да се спре когато се стигне до търсенето 'id'. Тогава според броя върнати резултати (като ги разделя на $per_page), ще мога да определя и точната страница в която се намира въпросното 'id'? Титла: Re: Помощ за mysql заявка при страниране на резултати Публикувано от: neter в Dec 01, 2009, 13:16 Не съм сигурен дали това е оптималният вариант, но това ми хрумна като работещо решение
Код Заявката избира всички редове от таблицата, които отговарят на зададената променлива $category, номерира редовете в изведената заявка, и след това от този резултат се избира редът с нужното id. В колоната row на крайния резултат ще се съдържа число, което можеш да разделиш на $per_page, да закръглиш към горната или долната стойност (както ти е по-удобно за твоя код), и ще получиш номера на страницата, в която би се намирал този ред ;) P.S.0: Това, че не използваш ORDER BY, може да доведе до неочаквани резултати при някои SELECT-и. Препоръчвам ти да го използваш (ти прецени за коя колона; може и да е различна в различните части на сайта, но трябва да е еднаква за зависещите една от друга заявки), за да си винаги наясно кое къде застава. P.S.1: Ако ще вписваш съответстващите страници за няколко id-та (например, списък от новини), не е хубаво да правиш цялата заявка за всеки отделен ред. Използвай само вътрешната част на заявката Код и използвай стойностите от получения масив, за да пресмяташ съответстващата страница за всеки ред. Титла: Re: Помощ за mysql заявка при страниране на резултати Публикувано от: Naka в Dec 07, 2009, 11:56 Мерси, ориентирах се. Мислех, че може да има по-просто и бързо решение и че нещо не доглеждам, но явно това е.
Цитат Това, че не използваш ORDER BY, може да доведе до неочаквани резултати при някои SELECT-и.ORDER BY имам в заявката, както и разни други дреболии, но я опростих заради примера. Освен това имам и в таблицата и колона с номерата на редовете-rownum. ;D Но тази колона не винаги е нормализирана не винаги се подържа в поредност на редеовете. Затова и търсих по просто решение. Ще трябва да си оправя подреждането на rownum колоната, и тогава всичко става много просто за изобразяване: както и странинирането, така и обратната задача за намиране на страницата по зададено id. |