Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zapetlenie do ostatniego wyjatku
Forum PHP.pl > Forum > PHP
AndyPSV
mam tablice, w ktorej to chce pobierac dane tak dlugo, az nie wystapi pusty rekord
jak to zrobic?

czyli wybieram przykladowo z bazy jakis rekord
SELECT * FROM tabela WHERE id = 5 LIMIT 1

teraz szukam kolejnego rekordu co ma nazwe pola do_ID
SELECT * FROM tabela WHERE id = do_ID LIMIT 1

teraz znowu z tego rekordu pobieram nastepny rekord, co ma z kolei w polu do_ID [#2]
SELECT * FROM tabela WHERE id = do_ID LIMIT 1

...

i tak do momentu osiagniecia rekordu, w ktorym nie ma podanej wartosci do_ID

jak to zrobic?

p.s. wiem, ze da sie wrzucac .5.10.15.20.21.29 (same id, a pozniej zrobic z nich to samo); jednak chce znac rozwiazanie tego problemu; p.s. jak to wplywa na wydajnosc? chyba wielkiej roznicy nie ma pomiedzy tymi rozwiazaniami?

potrzebne mi rozwiazanie tego problemu, dziekuje
Fifi209
Wysyłanie kilkunastu/kilkuset zapytań do bazy nie będzie dobrym rozwiązaniem.

Prościej wyciągnąć tylko "niepuste" rekordy.

np.
  1. SELECT id FROM tabelka WHERE id IS NOT NULL


Chyba tak tongue.gif

Co do problemu, jeżeli wystąpi pusty rekord w pętli walnij break i po sprawie.
AndyPSV
wymyslilem sposob, ze "zgrupowac" i policzyc rekordy

jednak ten problem kiedys i tak sie pojawi, natomiast NOT NULL nie rozwiazuje problemu
bylem tylko ciekawy jak to zamknac w petli, bo jak dotad to robilem same IF'y ;]
sadistic_son
Rozwiązanie fifiego wydaje się być najtrafniejsze. Ale można też wyciągnąć z bazy wszystko co Cię interesuje i samym phpem wywalić puste rekordy. Jako pusty rekord rozumiem każdy rekord w którym choć jedna komórka jest pusta.
Po prostu dla każdej komórki robisz w while sprawdzenie czy nie jest pusta i jeśli nie to przypisujesz sobie do nowej tablicy. Tzn tworzysz to samo co przypisujesz do mysql_fetch_array (lub _row itp.) w petli while:
  1. $tab=array();
  2. $i=0; $j=1;
  3. while($row=mysql_fetch_array($query)){
  4. foreach($row as $r){
  5. if($r!=''){
  6. $tab[$i][]=$r;
  7. }else{ $j=0; }
  8. }
  9. if($j!=0){ $i++; }
  10. $j++;
  11. }
Nie wiem czy dobrze kombinuję, jeszcze śpię wink.gif

EDIT: Dopiero teraz doczytałem, że chcesz pobierać do tablicy tak długo aż nie będzie pustego. W takim wypadku po prostu wywal $j++; z linijki 10.
Quantum
nie wiem czy o to Ci chodziło, ale może w ten sposób:
  1. SELECT *
  2. FROM `table`
  3. WHERE `id` < (
  4. SELECT `id`
  5. FROM `table`
  6. WHERE `content` = ''
  7. LIMIT 1 )
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.