Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][SQL] Pętla wykonująca się tyle razy, ile jest rekordów w tabeli
hipekhop
post 30.08.2011, 23:57:09
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Przepraszam, nie przywitałem się nawet jak należy! Do tej pory wyłącznie czytałem, unikając pytań, kiedy to tylko było możliwe- i udawało się od 2008 roku, aż do dzisiaj! Tedy jeśli odpowiedź gdzieś jest, a nie znalazłem jej- serdecznie przepraszam, ale statystykę i tak mam dobrą!
W związku z powyższym- Hilary, kłaniam się smile.gif

Mam problem, otóż nie wiem, jak skonstruować zapytanie, w którym będzie pętla wykonująca się tyle razy, ile jest rekordów w danej encji.
Rozpisując to prościej, acz brutalnie opisowo.

a = SELECT COUNT(*) FROM `tabela`;
b = 1;

while a > b loop


/*cuś tutaj mojego,z tym dam sobie radę, jak sądzę wink.gif */

b++;

end loop

Nie ująłem powyszego w tagi kodu, bowiem byłaby to zbrodnia przeciw twórcom tego cudu (w moim odczuciu wink.gif ).

Mam nadzieję, że przykład mimo wszystko jest czytelny, z góry dziękuję za pomoc.

Ten post edytował hipekhop 30.08.2011, 23:59:52
Go to the top of the page
+Quote Post
tolomei
post 31.08.2011, 00:25:03
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


  1. $result = mysql_query('SELECT COUNT(*) as ilosc FROM `tabela`');
  2. $a = mysql_fetch_assoc($result);
  3. for($b = 0; $b < $a['ilosc']; $b++) {
  4. //twój kod
  5. }


Zachęcam do używania PDO przy wyciąganiu danych z bazy.

Ten post edytował tolomei 31.08.2011, 00:26:05


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
hipekhop
post 31.08.2011, 00:27:12
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Dziękuję pięknie za odpowiedź, ale... rzecz w tym, że chcę to wszystko zrobić czystem SQL, z użyciem w tym wszystkim php dałbym sobie radę, bo już tak kiedyś zrobiłem.
Dziś jednak dojrzałem do tej decyzji- musi to być w czystem sql niestety:/
Go to the top of the page
+Quote Post
Rid
post 31.08.2011, 00:28:10
Post #4





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Ja bym proponował użycie pętli foreach jest bardziej bezpieczniejsza.
Go to the top of the page
+Quote Post
tolomei
post 31.08.2011, 00:30:10
Post #5





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


@Rid uzasadnij swoją wypowiedź proszę - jestem bardzo ciekawy. smile.gif
Po której tablicy byś się poruszał ?

@hipekhop jak chcesz wykonać "jakiś tam własny kod" ilość razy odpowiadającą ilości rekordów w bazie nie używając PHP ?

Ten post edytował tolomei 31.08.2011, 00:33:26


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
hipekhop
post 31.08.2011, 00:44:49
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


http://www.drzewo-wiedzy.pl/?page=artykul&...%99tle_w_PL/SQL

To by wskazywało na to, iż się da smile.gif
Go to the top of the page
+Quote Post
tolomei
post 31.08.2011, 00:55:24
Post #7





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Zrozumiałem, że kod wewnątrz pętli ma być kodem PHP.
Jeśli wewnątrz pętli chcesz wykonywać kolejne zapytania w języku SQL to oczywiście - da się.

Jeśli chodzi o Twój kod to z całą pewnością b powinno być inicjowane wartością zero.
Więcej nie jestem w stanie powiedzieć bo nie mam doświadczenia z tego rodzaju tworami smile.gif

Pozdrawiam


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
hipekhop
post 31.08.2011, 01:00:05
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Szkoda... nic to, dziękuję pięknie i czekam dalej- może trafi się ktoś, kto jednym słowem mnie naprowadzi biggrin.gif
Go to the top of the page
+Quote Post
tolomei
post 31.08.2011, 01:09:07
Post #9





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Może to powinno pomóc ?
http://bit.ly/q63pZI


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
Rid
post 31.08.2011, 01:25:16
Post #10





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat
Rid uzasadnij swoją wypowiedź proszę - jestem bardzo ciekawy. smile.gif
Po której tablicy byś się poruszał ?

Powiem ,krótko w pętli for można popełnić wiele błędów w ineksowniu(np.wykrocznie poza zakres tablicy).
Tutaj ma Pan przykłady jakie błędy może Pan popełnić w pętli for.Kurcze długo szukałem tych przykładów.
W pętli foreach,nie ma możliwości zrobienia takich błędów.

Odnośnie problemu,albo utworzy Pan procedurę składową ,albo pozostaje pętla której pan nie chce(tylko nie wiem czemu),
w samym zapytaniu Pan tego nie zrobi.

Ten post edytował Rid 31.08.2011, 01:30:35
Go to the top of the page
+Quote Post
hipekhop
post 31.08.2011, 01:29:46
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Ciężko mi to ogarnąć, ale postaram się, bo chyba faktycznie pomoże. Dzięki biggrin.gif
Go to the top of the page
+Quote Post
tolomei
post 31.08.2011, 09:48:24
Post #12





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


@Rid nie wiem czy zauważyłeś, ale post który podałeś w linku jest o VBA, a nie o PHP.

To prawda, że łatwo można popełnić błąd i wykroczyć poza rozmiar tablicy, tak jak w poniższym przykładzie:
  1. $tab = array('a','b','c','d');
  2. for($i = 0; $i < 5; $i++) {
  3. echo $tab[$i].'<br />';
  4. }


Jednakże nie jest to dowód na to pętla for jest niebezpieczna.
Za pomocą każdej pętli możemy wykroczyć poza rozmiar tablicy, gdy kod jest źle skonstruowany. W takim przypadku mówmy o jakości programisty, a nie o jakości pętli.

Dla przypadku z mojego pierwszego posta - nie widzę sensownego zastosowania pętli foreach.

Pozdrawiam


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
hipekhop
post 2.09.2011, 00:43:54
Post #13





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Ok, to mam pytanie...

  1. CREATE PROCEDURE ITERATOR()
  2. LANGUAGE SQL
  3. BEGIN
  4. DECLARE v_deptno CHAR(3); DECLARE v_deptname VARCHAR(29);
  5. DECLARE at_end INTEGER DEFAULT 0;
  6. DECLARE not_found CONDITION FOR SQLSTATE '02000';
  7.  
  8. DECLARE c1 CURSOR FOR SELECT deptno, deptname
  9. FROM department ORDER BY deptno;
  10. DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1;
  11. OPEN c1;
  12.  
  13. ins_loop: LOOP
  14.  
  15. FETCH c1 INTO v_deptno, v_deptname;
  16.  
  17. IF at_end = 1 THEN
  18. LEAVE ins_loop;
  19. ELSEIF v_dept = 'D11' THEN
  20. ITERATE ins_loop;
  21. END IF;
  22.  
  23. INSERT INTO department (deptno, deptname)
  24. VALUES ('NEW', v_deptname);
  25.  
  26. END LOOP;
  27.  
  28. CLOSE c1;
  29. END

Tę procedurę podano tutaj: http://publib.boulder.ibm.com/infocenter/d...oc/c0024352.htm
A mimo to otrzymuję błąd: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

Nie rozumiem o co chodzi, jeśli chodzi o mojego locala, to na wamp postawiłem i mam takie o:
Wersja klienta MySQL: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $

I co tutaj się dzieje nie rozumiem i jestem po prostu głupi... czy ktoś umiałby mi pomóc? :/
Go to the top of the page
+Quote Post
tolomei
post 2.09.2011, 01:10:24
Post #14





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Pod okienkiem, gdzie wpisujesz SQL jest coś takiego:

Separator: [ ; ]

Zmień to na znak ^ .


PS. Nie jesteś głupi smile.gif

Ten post edytował tolomei 2.09.2011, 01:10:59


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
hipekhop
post 2.09.2011, 14:16:45
Post #15





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 31.10.2008

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


Już dawno nie miałem takiej ucieszonej miny!
No, może kiedy zdesperowany zacząłem szukać ciekawych filmów na youtube i znalazłem to: http://www.youtube.com/watch?v=tqv-ZzXpeAs

Dzięki ogromne, wszystko działa, gra i bucy! biggrin.gif

A co do PS, to cóż... jak nie głupi, to ślepy wink.gif

Ten post edytował hipekhop 2.09.2011, 14:17:36
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 14:46