Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Procedura rekurencyjna + odpowiednik foreach i array[]
Forum PHP.pl > Forum > Przedszkole
barthpl
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
Kicok
1. Deklaruj zmienne na początku procedury.
2. http://dev.mysql.com/doc/refman/5.0/en/cursors.html
barthpl
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 ??
Kicok
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 )
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.