Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zamiana zapytania MySQL na Postgres
uirapuru
post 16.04.2010, 11:31:47
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


Proszę o pomoc smile.gif

Implementuję sobie nested sets w postgresie korzystając z materiałów dla MySQL. Większość zapytań zgrabnie mi idzie przerobić, ale zatrzymałem się na add node. Mógłby ktoś mi pomóc z przeróbką? wydaje się wykrzaczać na @myRight:

Oryginalne dla MySQL:

  1. LOCK TABLE categories WRITE;
  2.  
  3. SELECT @myRight := rgt FROM categories
  4.  
  5. WHERE id = 48;
  6.  
  7. UPDATE categories SET rgt = rgt + 2 WHERE rgt > @myRight;
  8.  
  9. UPDATE categories SET lft = lft + 2 WHERE lft > @myRight;
  10.  
  11. INSERT INTO categories(title, ORDER, parent_categories_id, lft, rgt) VALUES('prooba', 1,1,@myRight + 1, @myRight + 2);
  12.  
  13. UNLOCK TABLES;




Tutaj moja wstępna, niedziałająca jeszcze wersja dla Postgres:

  1. BEGIN WORK;
  2.  
  3. LOCK TABLE categories IN ACCESS SHARE MODE;
  4.  
  5. SELECT @myRight := rgt FROM categories
  6.  
  7. WHERE id = 48;
  8.  
  9. UPDATE categories SET rgt = rgt + 2 WHERE rgt > @myRight;
  10.  
  11. UPDATE categories SET lft = lft + 2 WHERE lft > @myRight;
  12.  
  13. INSERT INTO categories(title, ORDER, parent_categories_id, lft, rgt) VALUES('prooba', 1,1,@myRight + 1, @myRight + 2);
  14.  
  15. commit work;




Na razie pgadmin wykrzacza mi się tak i już kończą mi się pomysły:

  1. ERROR: syntax error at or near ":" LINE 4: SELECT @myRight := rgt FROM categories ^
  2.  
  3. *** Błąd ***
  4.  
  5. ERROR: syntax error at or near ":" Stan SQL:42601 Znak:74
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
phpion
post 16.04.2010, 11:40:35
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W PostgreSQL nie ma czegoś takiego jak zmienne użytkownika. Musisz całość zamknąć w jakiejś funkcji czy procedurze, w której zadeklarujesz swoją zmienną:
  1. DECLARE myRight INTEGER;

po czym będziesz mógł przypisać do niej wartość poprzez:
  1. SELECT rgt INTO myRight FROM categories WHERE id=48;

dalej powinno zadziałać tak jak aktualnie masz, poza zmianą @myRight na myRight.

Ten post edytował phpion 16.04.2010, 11:41:25
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: 27.06.2025 - 04:25