Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Procedura rekurencyjna + odpowiednik foreach i array[]
barthpl
post 1.09.2008, 15:29:57
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


Czy ta procedura jest poprawna? Jej założeniem jest zwiększenie licznika w forum i we wszystkich rodzicach.
Kod
DELIMITER //

DROP PROCEDURE IF EXISTS `forumAddedPost` //
CREATE PROCEDURE `forumAddedPost`(
    IN argForumId INT
)
BEGIN
    UPDATE forum
    SET postNo = postNo +1
    WHERE forumId = argForumId;

    DECLARE varParentId INT DEFAULT 0;

    SELECT parentId
    FROM forum
    WHERE forumId = argForumId
    INTO varParentId;

    IF varParentId != 0 THEN
        CALL forumAddedPost( varParentId );
    END IF;
END //

DELIMITER;


Wyświetla się mi błąd: 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 'DECLARE varParentId INT DEFAULT 0; SELECT parentId FROM forum WHERE foru' at line 9

A i jeszcze jedno jaki będzie odpowiednik polecenia sql równoważnego z takim oto poleceniem PHP:
  1. <?php
  2. $result = mysql_query( "SELECT * FROM forum WHERE parentId = '$forumId'" );
  3. while( ($row =) != false )
  4. mysql_query( "CALL forumAddedPost($row[forumId])" );
  5. ?>


edit --> dodałem tytuł i poprawiłem zapytanie winksmiley.jpg

Ten post edytował barthpl 1.09.2008, 16:33:40


--------------------
Jeżeli pomogłem rozwiązać Twój problem, kliknij pomógł.
Go to the top of the page
+Quote Post
Kicok
post 1.09.2008, 17:39:20
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


1. Deklaruj zmienne na początku procedury.
2. http://dev.mysql.com/doc/refman/5.0/en/cursors.html


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
barthpl
post 1.09.2008, 22:07:07
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


Tak się jeszcze zapytam. W jaki sposób interpretowana jest procedura przez MySQL?? Chciałbym wiedzieć czy jeżeli w procedurze mam kilka zapytań to czy są wykonywane jedna po drugiej jako jedno polecenie MySQL czy może się zdążyć, iż pomiędzy poszczególnymi zapytaniami zostanie wykonane jakieś inne zapytanie??

Obrazowo mówiąc procedury 1 i 2 mają zapytanie A i B. W jakiej kolejności zostaną obsłużone zapytanie wysłane w jednym momencie (procedura1, zapytanie G, procedura 2). Czy będzie to procedura1.A, procedura1.B, G, procedura2.A, procedura2.B czy raczej może się zdarzyć tak: procedura1.A, G, procedura2.A, procedura1.B, procedura2.B ??
Go to the top of the page
+Quote Post
Kicok
post 2.09.2008, 08:36:23
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat
Chciałbym wiedzieć czy jeżeli w procedurze mam kilka zapytań to czy są wykonywane jedna po drugiej jako jedno polecenie MySQL czy może się zdążyć, iż pomiędzy poszczególnymi zapytaniami zostanie wykonane jakieś inne zapytanie??


Może się tak zdażyć. Musisz wykorzystać tranzakcje.
I pamiętaj, że tranzakcje działają tylko na tabelach InnoDB - na MyISAM nie działają ( bez wyrzucania jakichkolwiek ostrzeżeń, po prostu są ignorowane )

Ten post edytował Kicok 2.09.2008, 08:37:40


--------------------
"Sumienie mam czyste, bo nieużywane."
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: 13.06.2025 - 05:00