[MySQL] Jak skontrukowac zapytanie

0

Mam zapytanie:

insert into tabela (id,nazwa,kolor) VALUES (NULL,'talerz','niebieski'); - gdzie od id to autoincrement a jak zrobic zeby zrobic to samo zapytanie ale wstawiajac to id w pole varchar np:

insert into tabela (id,nazwa,kolor,id_stare) VALUES (NULL,'talerz','niebieski',tu ma byc to id z pozycji pierwszej)

W miejsce id_stare ma wejsc to co jest pod id czyli ten autoincrement jak to tu wsadzic?

insert into tabela (id,nazwa,kolor,id_stare) VALUES (NULL,'talerz','niebieski',????)

0

Przede wszystkim jaka baza?. Po drugie czemu w pole varchar?
W MSSQL to zmienna zdaje sie SCOPE_IDENTITY
w MySql o ile pamietam to funkcja GET_LAST_INSERT_ID();

0

Mysql - sorki zapomnialem napisac.
Robie baze produktow i kazda edycja produktu ma byc tak zapisywana ze tworzy sie kopia rekordu z data, userem ktorym zmienia i teraz musze jakos polaczyc te pola zeby bylo wiadomo ze o ten sam produkt chodzi.
Np mam
Produkt 1 i on ma id=1 , ktos przychodzi i cos w nim zmienia , czyli tworzy drugi rekord:
Produkt 1 zmienienony i on ma ID(wlasnie dlatego varchar tzn moze byc int w sumie) = 1 , trzecia zmiania:
Produkt 1 i ID
= 1

POle ID_ wiąze te 3 rekordy, jeszcze mam problem bo mam pola data i typ timestamp , musze wyswietlic rekord ale najbardziej aktualny czyli ten ktory zostal ostatnio zmieniony czyli MAX(data) ale zdaje sie ze nie ma tak latwo i MAX (data) nie zda egzaminu ale przeciez moge po MAX(id) pojechac to to samo chyba nie? :) bo kazdy rekord oczywiscie ma swoj unikalny ID.

No wlasnie mam takei rekordy w bazie:

id=1 nazwa=aaaa id=1
id=2 nazwa=aaaa id
=1
id=3 nazwa=aaaa id=1
id=4 nazwa=aaaa id
=2
id=5 nazwa=aaaa id_=2

teraz chce wyswietlic te rekordy z najwzyszym id w danej grupie id_
Jak to zrobic?czyli tu musialyby sie wyswietlic wiersze o id=3 i id=5

0

Dalej nie rozumiem czemu varchar - przeciez to takie samo id jak tamto... To nie lepiej int, jak tamto? Latwiej bedzie zaznaczac, ktory jest aktualnym wierszem - czyli robisz update na danym id, zeby zaznaczyc, ze nie jest juz aktualny, po czym wstawiasz nowy wiersz z zaznaczeniem, ze jest aktualny.

0

triger, stored proc, a w wersjach nie posiadających ww to kupa zabawy

0

Wymyslilem cos takiego:

select * from tabela where id IN (select MAX(id) from tabela group by _id))

proste:)

A co do varchar na id_ to faktycznie musi byc INT lepiej :)

0
Glina napisał(a)

proste:)

i wysypie sie predzej czy pozniej ...

0
Misiekd napisał(a)

i wysypie sie predzej czy pozniej ...

Czemu sie ma wysypac?

0

bo MAX(id) nie gwarantuje Ci, że jest to id rekordu, który przed chwilą wstawiłeś

0
Misiekd napisał(a)

bo MAX(id) nie gwarantuje Ci, że jest to id rekordu, który przed chwilą wstawiłeś

Rozumiem ze wg Ciebie majac id rowne kolejno 1,2,3,4,5,6 , wykonanie MAX(id) nie gwarantuje mi ze zapytanie zwroci wartosc 6 ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0