Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Od czego w ogóle zacząć?
Forum PHP.pl > Forum > Przedszkole
poczatkujaca12
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?
amii
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.
CuteOne
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. }
poczatkujaca12
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. }
xsonic
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.
Dominis
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.
xsonic
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.
poczatkujaca12
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. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.