Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif) )?

Ostatnie zmolne pytanie (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 06:10