Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana zapytania MySQL na Postgres
Forum PHP.pl > Forum > Bazy danych
uirapuru
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
phpion
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.