Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INSERT + SELECT + MAX ...
Forum PHP.pl > Forum > Bazy danych > MySQL
marverix
Witam!
Wie ktoś dlaczego to zapytanie wywołuje błąd:
Unknown column 'position' in 'field list' questionmark.gif

INSERT INTO k_opt_cat VALUES ('','1',(SELECT MAX(position)+1),'test','test','test')

// pierwsza wartość jest pusta bo to jest auto_increment

pozdrawiam serdecznie!
AxZx
bo nie podales z jakiej tabeli ma pobrac wyniki
nie ma takiej kolumny jak position.
marverix
hehe... myslisz ze tego nei sprawdzałem? tongue.gif
jest taka kolumna jak positon bo wlasnie do niej wklada nowa wartosc { position=MAX(position)+1 }
a jak dam FROM to wywala mi całkowicie inny błąd. taki głupi to jeszcze nie jestem tongue.gif czasami pomyśle tongue.gif naprawdę ostatecznością było pisanie tutaj. w Google też szukałem! - żeby nie było.
webdice
Maksymalną pozycje odczytujesz z tej samej tabeli? Napisz jakie błędy wyskakują Ci w konkretnych sytuacjach.
marverix
no bo nic innego mi nie przyszło do głowy biggrin.gif ma to działać jak auto_increment tongue.gif
yhmm... chcę to zrobić w jednym zapytaniu. bo wiem że można w 2 (osobno) i będzie gites majonez, no ale... w ostateczności.

mogę do tego 'wewnętrznego' SELECT dodać WHERE?
(np. SELECT MAX(position)+1 WHERE cid='2')

---------------------------------------------------------------------------

SQL: INSERT INTO k_opt_cat VALUES ('','1',(SELECT MAX(`position`)+1),'test','test','test')
ERR: #1054 - Unknown column 'position' in 'field list'

SQL: INSERT INTO k_opt_cat VALUES ('','1',(SELECT MAX(`position`)+1 FROM k_opt_cat),'test','test','test')
ERR: #1093 - You can't specify target table 'k_opt_cat' for update in FROM clause
webdice
Przed chwilą to sprawdzałem. Pierwszy przykład jest na pewno zły bo nie podajesz tabeli w SELECT, co do drugiego sposobu to wygląda poprawnie z tym że jeśli to jest ta sama tabela to wyskakuje błąd, dodatkowo szukałem w manual'u MySQL i wszystkie przykłady są na dwóch tabelach. Prawdopodobnie nie da się tego zrobić, ale nie jestem tego pewien.
marverix
no i w tym momencie to staje się bez sensu. bo jak tu zrobić efekt auto_increment? dry.gif
webdice
Znalazłem, może nie do końca estetyczne rozwiązanie ale działa.

  1. INSERT INTO `test` (`id`, `name`, `position`) VALUES (NULL, 'name', (SELECT * FROM (SELECT MAX(`position`)+1 FROM `test`) AS `position`));
marverix
  1. INSERT INTO `k_opt_cat` (`id`,`iid`,`position`,`title_pl`,`title_en`,`title_de`) VALUES (NULL, '1', (SELECT * FROM (SELECT MAX(`position`)+1 FROM `k_opt_cat`) AS `position`),'test','test','test');


#1093 - You can't specify target table 'k_opt_cat' for update in FROM clause

i co teraz? tongue.gif
webdice
  1. (SELECT * FROM (SELECT MAX(`position`)+1 FROM `test`) AS `position`)


Zapomniałeś gwiazdki przy pierwszym SELECT'cie. Co do gwiazdki, spróbuj dać samo position bo nie ma sensu pobierać wszystkich rekordów, tylko nie wiem czy to zadziała.
frickle
A próbowałeś tak:
  1. INSERT INTO k_opt_cat VALUES ('','1',(SELECT MAX(`position`) FROM k_opt_cat)<span style='color:orange'>+1,'test','test','test');

questionmark.gif?
webdice
Cytat(frickle @ 16.12.2007, 17:28:23 ) *
A próbowałeś tak:
  1. INSERT INTO k_opt_cat VALUES ('','1',(SELECT MAX(`position`) FROM k_opt_cat)<span style='color:orange'><span style='color:orange'>+1,'test','test','test');

questionmark.gif?


Przeczytaj dokładnie to co napisał autor.
marverix
Cytat(webdicepl @ 16.12.2007, 15:12:46 ) *
  1. (SELECT * FROM (SELECT MAX(`position`)+1 FROM `test`) AS `position`)


Zapomniałeś gwiazdki przy pierwszym SELECT'cie. Co do gwiazdki, spróbuj dać samo position bo nie ma sensu pobierać wszystkich rekordów, tylko nie wiem czy to zadziała.


no przeciez dalem gwiazdke... guitar.gif

czyli tylko przez 2 polecenia?... ;/

odpowie mi ktoś? dry.gif
webdice
Mi na MySQL 5.0.45 to działa, jaką masz wersje MySQL?
marverix
4.1.21
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.