Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Procedury w MySQL ?
Black-Berry
post 30.06.2007, 09:17:40
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Kiedyś chodziłem na kurs Oracle. Tam nas uczyli, że za pomocą oracla można tworzyć procedury. Niestety to było dawno i nie pamiętam jak to było a jakoś nie mogę się doszukać? Jest takie coś możliwe za pomocą mySQL?

Jeśli tak to jak przekształcić poniższą procedurę php na zapytanie mySQL ?
  1. <?php
  2. $query = "SELECT * FROM mytable ORDER BY succession";
  3. $result = mysql_query ( $query ) or die ( _SQL_ERROR_ . mysql_error() );
  4. $c = 0;
  5. while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  6. {
  7. $c = $c + 1;
  8. mysql_query( "UPDATE mytable SET succession = " .$c. " WHERE id = ".$row["id"]."" );
  9. }
  10. ?>
Serdecznie prosze o pomoc.

Ten post edytował Black-Berry 30.06.2007, 09:21:16


--------------------
Go to the top of the page
+Quote Post
wijet
post 30.06.2007, 11:34:37
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Mysle ze duzo sie nie rozminolem z tym co chciales osiagnac,dopiero wstalem.
  1. delimiter //
  2. CREATE PROCEDURE zwieksz ()
  3. BEGIN DECLARE c INT;
  4. DECLARE last INT;
  5. DECLARE row_id INT;
  6. DECLARE k CURSOR FOR SELECT id FROM mytable ORDER BY succession;
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET last=1;
  8. SET c = 0;
  9. SET last = 0;
  10. OPEN k;
  11. k_loop: LOOP
  12. SET c = c + 1;
  13. FETCH k INTO row_id; IF last = 1 THEN
  14. LEAVE k_loop;
  15. ELSE
  16. UPDATE mytable SET succession = c WHERE id = row_id;
  17. END IF;
  18. END LOOP k_loop;
  19. CLOSE k;
  20. END;
  21. //


Ten post edytował wijet 30.06.2007, 11:46:30


--------------------
Go to the top of the page
+Quote Post
c3zi
post 30.06.2007, 11:35:27
Post #3





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


Tak sobie mysle, po co pobierasz najpierw wszystkie wpisy wg succession, a potem i tak succession ustawiasz od 0?


--------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Go to the top of the page
+Quote Post
Black-Berry
post 30.06.2007, 12:53:02
Post #4





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


@wijet Dzięki wielkie za kod ale nie wiem czemu wyskakuje mi coś takiego
Kod
SQLERROR: Something is wrong in your syntax obok 'delimiter // CREATE PROCEDURE zwieksz () ' w linii 1

Czy to znaczy że mój silnik SQL nie obsługuje tego? Czy może zle to podpiąłem przez php. kod który wysłałeeś zapakowałem do zmiennej $sort_query i wywołałem tak:
  1. <?php
  2. mysql_query ( $sort_query ) or die ( _SQL_ERROR_ . mysql_error());
  3. ?>
Nie wiem czy dobrze myślę. Mam raczej niewielkie doświadczenie w bazach danych.

@c3zi Moja tabela zawiera wartosci zmiennoprzecinkowe w polu succession. Biorą się one stąd, że kiedy dodaję nowy wpis pomiędzy dwa istniejące ustalam jego kolejność jako liczbę z przedziału pomiędzy nimi. Teraz kiedy posortuję te wpisy liczbami naturalnymi mam pewność, że jeśli dodam jakiś nowy wpis to będę miał wszystko poukładane. Dzięki temu mam bardzo fajnie wszystko poukładane w bazie i później wyświetlając tabelę która zawiera pole z kolejnością nie muszę już tych danych obrabiać tak żeby były ponumerowane.

Ten post edytował Black-Berry 30.06.2007, 13:00:10


--------------------
Go to the top of the page
+Quote Post
wijet
post 30.06.2007, 13:04:44
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Sprobuj pominąć w tym zapytaniu 'delimiter //' na początku i '//' na końcu, co do silnika to oczywiście musisz mieć mysql 5.x

Ten post edytował wijet 30.06.2007, 13:05:52


--------------------
Go to the top of the page
+Quote Post
Black-Berry
post 30.06.2007, 13:12:48
Post #6





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Cytat(wijet @ 30.06.2007, 14:04:44 ) *
Sprobuj pominąć w tym zapytaniu 'delimiter //' na początku i '//' na końcu, co do silnika to oczywiście musisz mieć mysql 5.x

Chyba jednak mam versje 3.8 (tak gdzieś własnie wyczytałem). To chyba mnie to nie urządza bo chcę miec maksymalnie przenośny system, a skoro nie pójdzie na niektórych wersjach mySQL'q to chyba lepiej jak zostanę przy starej wersji mojej procedury (właściwie to nie muli ona aż tak bardzo).

Dzięki wielkie za pomoc. Wątek zostanie dla potomnych smile.gif


--------------------
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: 31.07.2025 - 04:42