Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Połaczyć INSERT z SELECT
pabbito
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 26.03.2004
Skąd: Gdańsk

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


Tym zapytaniem wybieram Stronę o najwyższym numerze kolejnosci:
  1. SELECT Kolejnosc FROM Strony WHERE Parent=0 ORDER BY Kolejnosc DESC LIMIT 1;

i chciałbym żeby wynik tego zapytania+1 był wykorzystany w poniższym INSERT'cie
  1. INSERT INTO Strony (Id_Strony, Nazwa, Tytul, Title, Tresc, Aktywna, Parent, Kolejnosc, Haslo, Typ, Menu) VALUES (13, 'Księga Gości', 'Księga Gości', '', 'Księga Gości', 1, 0, <!--o tutaj-->, 0, 0, 1);


1) Czy da się to zrobić tylko w MySQL, jakimś jednym złaczonym zapyaniem? Jeśli tak to jak?
2) Albo może można przechować wynik SELECT'a w jakiejś zmiennej sql'owej i potem wykorzystać zmienną w INSERT ? Jeśli tak to jak?

PS. Nie chodzi mi o rozwiązanie w php.

EDIT:
Nikt nie odpowiedział, ale szukałem rozwiązania sam i doszedłem do tego:
  1. SET @p:= (SELECT MAX(Kolejnosc) FROM Strony); INSERT INTO Strony (Id_Strony, Nazwa, Tytul, Title, Tresc, Aktywna, Parent, Kolejnosc, Haslo, Typ, Menu) VALUES (13, 'Księga Gości', 'Księga Gości', '', 'Księga Gości', 1, 0, @p, 0, 0, 1);


Tylko teraz mam pytanie: Jak zablokować tabelę Strony żeby w miedzyczasie warość maksymalnej kolejnosci nie uległa zmianie.

I drugie pytanie: Od jakiej wersji MySQL działa takie przypisywanie do zmiennej?

Ten post edytował pabbito 3.06.2006, 18:22:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pabbito
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 26.03.2004
Skąd: Gdańsk

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


No więc problem rozwiązałem w ten sposób:
  1. INSERT IGNORE INTO Strony (Kolejnosc) SELECT MAX(Kolejnosc)+1 FROM Strony; UPDATE Strony SET Id_Strony=13, Nazwa='Księga gości', Tytul='Księga gości' , Title='', Tresc='<p>Księga gości</p>', Aktywna=1 WHERE Id_Strony=LAST_INSERT_ID();


Dzięki bendi za podsunięcie pomysłu.

Jak ktoś ma komentarz do tego rozwiązania to proszę śmiało.
Dalej nie wiem jak spowodować żeby pomiedzy tymi zapytaniami nikt nie mógł wykonać innych zapytań modyfikujących.
Go to the top of the page
+Quote Post
bendi
post
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


A nie lepiej tak:
  1. INSERT IGNORE INTO Strony (Kolejnosc,Id_Strony,Nazwa,Tytul,Title,Tresc,Aktywna)
  2. SELECT MAX(Kolejnosc)+1,13,'Ksiega gosci','Ksciega gosci','', '<p>Ksiega gosci</p>', 1 FROM Strony;
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: 10.10.2025 - 20:59