Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Procedury w MySQL ?
Black-Berry
post
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
 
Start new topic
Odpowiedzi
wijet
post
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
Black-Berry
post
Post #3





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

Posty w temacie


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

 



RSS Aktualny czas: 5.10.2025 - 00:54