Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Z MSSQL do MySQL, Potrzebna pomoc :)
Grzesiek23
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

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


Witam!

Wyczytałem, iż MySQL - podobnie jak MSSQL - pozwala na stosowanie procedur i funkcji. Wszystko jest ok, tworzę i wywołuję procedurę/funkcję.

Jednak ani w phpMyAdmin ani w żadnym innym sofcie, który pozwala na zarządzanie MySQL nie mogę ani "zobaczyć" procedur/funkcji ani ich zmodyfikować. To normalne? W MSSQL Management miałem takie możliwości, czyżby tutaj to było nieosiągalne i za każdym razem muszę usuwać i tworzyć na nowo procedury/funkcje?


A teraz problem przy przejściu jaki napotykam:
  1. -- Check valid ForumID
  2. IF @ForumID IS NOT NULL AND NOT EXISTS(SELECT 1 FROM [dbo].[yaf_Forum] WHERE ForumID=@ForumID) begin
  3. SET @ForumID = NULL
  4. end


Czy ktoś byłby na tyle miły i pokazałby mi jak to ma wyglądać w MySQL? Kombinowałem dosyć długo i za każdym razem pupa zbita :/

Dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


W MySQL Workbench procedury i funkcje znajdują się w Routines w Object Browserze.

A co do IFa:
http://www.bennadel.com/blog/1340-MySQL-Do...L-Work-Flow.htm

+ drobne różnice w składni:
  1. IF @ForumID IS NOT NULL AND NOT EXISTS (SELECT 1 FROM tabela WHERE ForumID = @ForumID) THEN
  2. SET @ForumID = NULL;
  3. END IF;


--------------------
Go to the top of the page
+Quote Post
Grzesiek23
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

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


Kombinuję i nadal wywala błąd. Pytanie czy to zapytanie mogę wykonać normalnie w konsolce czy muszę wrzucić do procedury/funkcji.


  1. IF NOT EXISTS (SELECT 1 FROM jos_users WHERE id= 1) THEN
  2. SELECT * FROM jos_menu;
  3. END IF;


Ahhh, ok. Przeczytałem, już jasne smile.gif

Jeszcze jakby ktoś pomógł z tym kawałkiem kodu:


  1. SELECT
  2. @CategoryID = c.CategoryID,
  3. @ForumID = b.ForumID,
  4. @TopicID = b.TopicID
  5. FROM
  6. [dbo].[yaf_Message] a
  7. INNER JOIN [dbo].[yaf_Topic] b ON b.TopicID = a.TopicID
  8. INNER JOIN [dbo].[yaf_Forum] c ON c.ForumID = b.ForumID
  9. INNER JOIN [dbo].[yaf_Category] d ON d.CategoryID = c.CategoryID
  10. WHERE
  11. a.MessageID = @MessageID AND
  12. d.BoardID = @BoardID


to będzie super. Kombinowałem z SET na różne sposoby i niestety nie trybi w MySQL sad.gif

Ten post edytował Grzesiek23 15.03.2011, 11:45:52
Go to the top of the page
+Quote Post
Noidea
post
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Znak równości jest tu traktowany jak porównanie. Przypisanie wygląda tak jak w pascalu :=

  1. SET @var = 1;
  2. SET @var2 = NULL;
  3. SELECT @var = 1234, @var = 1, @var < 2, @var > 1,
  4. @var2 = 0, @var2 < 2, @var2 = NULL, @var2 IS NULL,
  5. @var := 1, @var := 1234

Kod
0    1    1    0    NULL    NULL    NULL    1    1    1234


Ten post edytował Noidea 15.03.2011, 16:08:15


--------------------
Go to the top of the page
+Quote Post
Grzesiek23
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

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


Dzięki!

A mógłbyś mi jeszcze wytłumaczyć czym się różni DECLARE zmienna (później przypisywania SET zmienna = ... ) od bezpośredniego użycia SET @zmienna = ... ? Co ta "małpka" nam daje? smile.gif
Go to the top of the page
+Quote Post
Noidea
post
Post #6





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


http://stackoverflow.com/questions/1009954...-the-difference
http://stackoverflow.com/questions/1010397...ifference-part2


--------------------
Go to the top of the page
+Quote Post
Grzesiek23
post
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

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


Dzięki ponownie.

Czyli w przypadku posługiwania się zmiennymi sesyjnymi, powinienem na początku procedury przypisać im wartość domyślą tak, aby nie została użyta wcześniejsza wartość (trochę tak na chłopsko napisane wink.gif )?

Ostatnie zmolne pytanie smile.gif

Mam takie zapytanko:
  1. SELECT @CategoryID:= parent.ID, @ArticledID:= node.ID FROM table1 AS node, table2 AS parent, table3 table3
  2. WHERE node.lft BETWEEN parent.lft AND parent.rgt AND parent.type= 0 AND table3.ID = in_TopicID AND table3.articledID = node.articledID
  3. ORDER BY parent.lft;



Czy można w jakiś sposób zrobić tak, aby przypisać do tych zmiennych odpowiednie wartości, ale bez użycia SELECTu?

W procedurze kawałek później robię select, który potrzebuję. Niestety teraz otrzymuję select z przypisania zmiennym wartości.
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 Aktualny czas: 20.08.2025 - 18:30