Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Od czego w ogóle zacząć?, dzielenie czasu wykonywania skryptu
poczatkujaca12
post
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


mam zrobić coś takiego:
jest 10000 rekordow w bazie
mam wybierac po 10 co 1minute do końca bazy i cos tam robic, skrypt ma wykonywac sie codziennie o ustalonej godzinie [tym to akurat cron moze sie zajac]
czy f-cja sleep będzie tu przydatna?

do głowy przychodzi mi coś takiego....
  1. $ile=mysql_num_rows($zap);
  2. $i=0;
  3. for($i;$i<$ile;$i+10){
  4. $pyt=mysql_query('select * from zbiory limit $i, 10');
  5. while($r=mysql_fetch_array($pyt)){
  6. echo $r['id'];
  7. }
  8. echo '<br />';
  9. sleep(60);
  10. }

Ale nie wiem czy ma prawo to zadziałać przy 10 000 rekordach i co na to serwer :-).
Zna ktoś lepsze rozwiązanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


Tyle, że tutaj będzie ci pobierał cały czas pierwsze 10 rekordów, jeśli chcesz pobierać po kolei to musisz zmienną $i odczytywać i zapisywać do pliku lub bazy.
Go to the top of the page
+Quote Post
CuteOne
post
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Niekoniecznie wystarczy header() z odpowiednim parametrem

  1.  
  2. $k = isset($_GET['page']) ? $_GET['page'] : 0;
  3. $ile=mysql_num_rows($zap);
  4.  
  5. if($k <= $ile) {
  6.  
  7. $pyt=mysql_query('select * from zbiory limit $k, 10');
  8. while($r=mysql_fetch_array($pyt)){
  9. echo $r['id'];
  10. }
  11. sleep(600);
  12. header('Location: index.php?page='.$k+10);
  13. }


Ten post edytował CuteOne 1.12.2011, 09:04:16
Go to the top of the page
+Quote Post
poczatkujaca12
post
Post #4





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dzięki, wieczorkiem [teraz jestem w pracy] tak zrobię i... mam nadzieję, że zadziała...

ps czy z tym sleepem jak chce się wrzucić działanie skryptu do Crona to też będzie działać?
Czy istnieje ryzyko, że nie pobierze całej bazy [limit czasu na wykonanie plików php na serwerze etc]

Czy na drugi dzień będzie zresetowane $k, czy będzie chciało działać dalej z parametrem $k=10000... czy bezpieczniej wyzerować?

  1. if($k < $ile) {
  2. // tak jak podałeś
  3. } else {
  4. $k=0;
  5. exit();
  6. }
Go to the top of the page
+Quote Post
xsonic
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 11.03.2010

Ostrzeżenie: (0%)
-----


Ja tam mam zapętlone skrypty ze sleepem i jest ok... zawsze możesz wyłączyć limit albo go zmienić chyba że to nie twój serwer a skrypty włączają się w safe mode.


  1. while ( 1 ) {
  2.  
  3. sleep(100);
  4. }


Użyłem do tego screean-a jeszcze i zawsze mogę podejrzeć stan skryptu bo mi prinuje co robi i z jakimi parametrami.
Go to the top of the page
+Quote Post
Dominis
post
Post #6





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

Ostrzeżenie: (0%)
-----


Mimo wszystko ja bym sobie dodal do tabeli kolumne ktora bedzie zawierac 1 lub 0(TRUE lub FALSE) i bral 10 rekordow ktore maja TRUE, robil cos z nimi, I zamienial w bazie na FALSE, po przesciu wszystkich rekordow, robie update kolumny zebym mial znow TRUE itd..
Wtedy skrypt nie musi działać cały czas, a jest wykonywany tylko co 1min przez crona.

Ten post edytował Dominis 1.12.2011, 11:24:23
Go to the top of the page
+Quote Post
xsonic
post
Post #7





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 11.03.2010

Ostrzeżenie: (0%)
-----


Jak tą drogą idziesz to nie lepiej dodać rekord albo 2 tabele z rekordem np: num i tam będzie wpisywany ostatnio modyfikowany rekord po id.
num ma 1
Akcja 1 pobiera num z tabeli zaczyna pobieranie 10 rekordów i zapisuje num + 10.
num ma 11
Akcja 2 pobiera num z tabeli zaczyna pobieranie 10 rekordów i zapisuje num + 10.

Przelecisz sobie całość co minute ze sleepem albo z wykorzystaniem crona i jest ok.
Go to the top of the page
+Quote Post
poczatkujaca12
post
Post #8





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


coś mi ten sleep nie chciał sie budzic i pobierał mi tylko pierwsze 10 rekordów [nie odświeżał się]
zrobię to jednak w cronie co minute cały czas [nie wiem czy to nie będzie za bardzo serwera obciazac?]

  1. $p=mysql_fetch_array(mysql_query("select id from licz"));
  2. $i=$p['id']; // zapisuje po prostu ID - domyślnie 0
  3. $zap=mysql_query("select * from zbiory where date<=DATE_FORMAT(TIMESTAMPADD(DAY,-2,now()), '%Y-%m-%d')");
  4. $ile=mysql_num_rows($zap);
  5. echo $ile."<br /><br />";
  6. if ($i<$ile){
  7. $pyt=@mysql_query("select * from zbiory where date<=DATE_FORMAT(TIMESTAMPADD(DAY,-2,now()), '%Y-%m-%d') limit ".$i.", 10");
  8. while($t=@mysql_fetch_array($pyt)){
  9. echo "".$t['id']." ".$t['id_m']."<br />";
  10. }
  11. echo 'id='.$i.'';
  12. $l=$i+10;
  13. mysql_query("update licz set id='".$l."'");
  14. } else {
  15. mysql_query("update licz set id='0'");
  16. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 06:15