|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
Тема
|
Разделяне на информацията
|
|
Автор |
hrisunko (Наблюдател) |
Публикувано | 06.09.01 19:50 |
|
Когато получавам записи от базата данни и те са прекалено много да се покажат наведнъж на екрана, мога ли да ги разделя на страници по 10 записа? Ако има възможност, моля да ми помогнете за скрипта.
Мерси предварително
| |
Тема
|
Re: Разделяне на информацията
[re: hrisunko]
|
|
Автор | edmon (Нерегистриран) |
Публикувано | 06.09.01 23:36 |
|
select .... limit
| |
Тема
|
Re: Разделяне на информацията
[re: hrisunko]
|
|
Автор | Alien (Нерегистриран) |
Публикувано | 07.09.01 10:37 |
|
Mojesh eventualno da probvash da prenesesh $sql_query_result na sledvashtata stranitza i kato i napravish da rechem mysql_fetch_array($sql_query_result) da otpechatash ostanalite ti redove!
Prenasqneto sam si izberi kak da go napravish ama preporychvam sys Session. Vse pak e po-sigurno!
| |
Тема
|
Re: Разделяне на информацията
[re: hrisunko]
|
|
Автор |
curly (Well known :P) |
Публикувано | 07.09.01 18:04 |
|
Ami powe4eto SQL serveri imat LIMIT
MySQL primer
SELECT blah FROM foo LIMIT 0,30
pokazfa 1st 30 lines
SELECT blah FROM foo LIMIT 30,30
pokazfa 2nd 30 lines
rgdz
curly
| |
Тема
|
Re: Разделяне на информацията
[re: curly]
|
|
Автор |
hrisunko (Наблюдател) |
Публикувано | 08.09.01 12:19 |
|
Това ми трябваше! Още не съм го опитал, но имам предчувстие :) Не знаех за съществуването на втория аргумент на limit, но явно ще свърши работа.
Мерси.
| |
Тема
|
Re: ????????? ?? ???????????? - MySQL only
[re: hrisunko]
|
|
Автор |
salle (Един такъв) |
Публикувано | 10.09.01 14:32 |
|
Въпросът е доста по дебел (и съответно интересен)
А именно когато става въпрос за тежък SELECT
Да кажем select без limit ти връща 100 000 реда
Проблем N1,
LIMIT $x, $y където $x и $y ги заместваш в движение с next10, prev10 е съвсем очевидно:
print"<a href=$PHP_SELF?x=$x&y=$y ....
Обаче това означава, че при всяко Next, Prev MySQL ще изпълнява пълния SELECT т.е. всичките 100 000 реда само ще ти връща x,y
Проблем N2
Ако искаш да сложиш нещо в стил:
Records 20-30 from 100 000
ще трябва да изпълниш SELECT-а 2 пъти
1. select count(*) from ... where .....;
2. select .... where ... limit x, y;
Така, че нещата стават доста дебели
Предложение:
Временна таблица. Т.е. кеширане на SELECT-а
Само, че в случая не може да се използва TEMPORARY TABLE на MySQL защото тя важи само за текущия PHP дори да се използва mysql_pconnect()
Та предложението ми е:
1-во извикване на страницата
генерираш нещо случайно, уникално и т.н. като име на таблица
$cache_tbl = '?????';
create table $cache tbl select .... тук следва пълния SELECT който искаш да търкаляш напред назад
select count(*) from $cache_tbl;
Оттук вече имаш Броя Редове Които Връща Твоя Оригинален SELECT
2. select * from $cache_tbl limit $x, $y;
И във <Prev><Next> предаваш $cache_tbl, $x, $
При което, оригиналната таблица се SELECT-ва еднократно, т.е. избягва се LOCK-ването и и освен това печелиш доста скорост.
Остава за решаване един (дребен :))) ) проблем:
Трябва да пазиш някъде списък на така създадените временни таблици и отвреме на време да ги триеш.
Щото това да прихванеш кога потребителя "Излиза" от страницата както всички знаем в HTML хич не е възможно
Linux is like a wigwam - No Windows, No Gates, Apache inside
| |
Тема
|
Re: ????????? ?? ???????????? - MySQL only
[re: salle]
|
|
Автор |
Цвeтaн Цвeтkoв (Администратор) |
Публикувано | 10.09.01 15:26 |
|
Може ли да не се съглася с нещо ;))
1.ако SELECT връща 100 000 реда, при LIMIT 50,100 при достигане на 100 MySQL, спира обработката и връща резултата без да го интересуват че общо са 100 000
Този проблем е дискутиран на дълго и на шитоко, и до колкото знам в последните версии е така както го описвам.
2. select count(*) from ... where .....; се прави само при генерирането на първата страница. След това си предаваш параметър $max_row и готово, избягва се тези заявка
:)
...
| |
Тема
|
db connection pool ...
[re: salle]
|
|
Автор |
AcidMemory (minimalist) |
Публикувано | 10.09.01 16:12 |
|
ako imashe built-in db connection pool, to togawa shteshe da e neobhodimo samo edno izpylnenie na zaqwkata, tyj kato celiq problem e w towa, che persistentnostta na konekciqta w mysql (a i izobsto w php-to) waji samo za syotwetniq child process na webserver-a
(t.e. trqbwa ti neshto ot roda na )
| |
|
1.
select ... where ... limit 50, 100;
Да
select ... where ... group by ... order by ... desc limit 50, 100;
Не
Във втория случая MySQL претъркулва цялата таблица във temp пише я във файл сортира го и чак тогава налага правилото LIMIT
Освен това дори и в случаите когато си прав
limit 50, 100 ще сортира 150 реда и ще спре след това нали така? За да ти изведе редове от 51 до 100
А limit 50, 2000 ще сспре след 2050 реда!!!!
2. Само ако таблицата е статична. Т.е. никой не пише докато web сървъра чете.
Прав ли съм?
В заключение.
Това което предложих не е решение за 100% от случаите
Нито пък твоите разсъждения
Винаги казвам: На който и да е въпрос относно бази данни правилния отговор е:
- Зависи
Linux is like a wigwam - No Windows, No Gates, Apache inside
| |
Тема
|
Re: db connection pool ...
[re: AcidMemory]
|
|
Автор |
salle (Един такъв) |
Публикувано | 10.09.01 17:51 |
|
Това пак не решава проблема с Logoff от web страницата
т.е. пак опираш до нещо от сорта на cookies, expire и т.н.
Linux is like a wigwam - No Windows, No Gates, Apache inside
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
|
|
|