Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie w MySQL, nie wiem jajk bliżej okreslić
bpawlik
post 7.06.2005, 06:24:36
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 13.01.2005

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


Witam

Mam tabelę o strukturze:
Kod
wersja | x | y | klucz
1      | a | a | 111
1      | b | b | 222
2      | c | c | 111
2      | d | d | 222
3      | e | e | 111

w bazie przechowywane są pary wartości (x i y) dla odpowiednich elementów identyfikowanych przez kolumnę klucz. Wartości te mogą się jednak zmieniać co obrazuje kolumna wersja np. element o kluczu 111 ma trzy wersje (1,2 i 3). Chodzi o by w możliwie optymalnym zapytaniu zwrócić wszystkie elementy o najnowszych wersjach, np.
Kod
wersja | x | y | klucz
2      | d | d | 222
3      | e | e | 111


Czy da się coś takiego wykonać jednym zapytaniem? Bez obrabiania wyniku w php?
Go to the top of the page
+Quote Post
rafcio8405
post 7.06.2005, 07:36:34
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 25.02.2004
Skąd: Warszawa

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


Nie wiem czy pomoże ale:
  1. SELECT `klucz`, `wersja`, `x`, `y`
  2. FROM `jakas_tabela` WHERE `klucz`='111' AND `wersja`<'9' AND `wersja`>'5'


albo

  1. SELECT `klucz`, `wersja`, `x`, `y`
  2. FROM `jakas_tabela` WHERE `klucz`='111' ORDER BY `wersja` DESC LIMIT 5


Polecam ten drugi przykład, który pokazuje 5 rekordów posortowanych od największego do najmniejszego.


--------------------
...::: R @ F I & S @ L I :::...
PrivateServ
Go to the top of the page
+Quote Post
SongoQ
post 7.06.2005, 08:12:23
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Chodzi o by w możliwie optymalnym zapytaniu zwrócić wszystkie elementy o najnowszych wersjach, np.


Musisz date wstawic bo skad bedziesz wiedzial ktory jest nowszy, zadnego id nie masz ani daty to jak chesz sortowac?


--------------------
Go to the top of the page
+Quote Post
bpawlik
post 7.06.2005, 14:37:29
Post #4





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 13.01.2005

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


Cytat(SongoQ @ 2005-06-07 07:12:23)
Musisz date wstawic bo skad bedziesz wiedzial ktory jest nowszy, zadnego id nie masz ani daty to jak chesz sortowac?

Najnowszy jest ten z największym numerem wersji, oczywiście.
Go to the top of the page
+Quote Post
SongoQ
post 7.06.2005, 21:48:32
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Czyli co nie masz nigdzie klucza podstawowego?


--------------------
Go to the top of the page
+Quote Post
bpawlik
post 8.06.2005, 08:58:21
Post #6





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 13.01.2005

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


Oczywiście, ze mam i mam jeszcze z 15 pól w tej tabeli, ale przedstawiłem tylko to co najważniejsze, poza tym id nie jest IMO w tym przypadku istotne. A kolumna "klucz" w tym przykładzie to akurat klucz obcy.

Prościej nie potrafię smile.gif
Go to the top of the page
+Quote Post
DeyV
post 8.06.2005, 11:47:24
Post #7





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Niestety - jest to problem bardzo trudny do rozwiązania w MySQL, przynajmniej w wersjach nie obsługujących subzapytań, i gdy nie chcemy wykorzystywać tabel tymczasowych.

Tak naprawdę jest to bowiem problem źle zaprojektowanej struktury - dane te powinny być przechowywane w kilku tabelach.

Ale jest to problem ... możliwy do rozwiązania. Więcej na ten temat:
http://dev.mysql.com/doc/mysql/en/example-...-group-row.html


W tym przypadku mogłoby to wyglądać tak:
  1. SELECT
  2. SUBSTRING( MAX( CONCAT( LPAD( wersja ,3,'0'), klucz) ), 4) AS klucz ,
  3. 0+LEFT( MAX( CONCAT( LPAD( wersja ,3,'0'), klucz) ), 3) AS wersja,
  4. RIGHT( MAX( CONCAT( LPAD( wersja ,3,'0'), z ) ), 1 ) AS z,
  5. RIGHT( MAX( CONCAT( LPAD( wersja ,3,'0'), y ) ), 1) AS y
  6. FROM `max_concat` GROUP BY max_concat.klucz;


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
bpawlik
post 8.06.2005, 12:13:02
Post #8





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 13.01.2005

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


Dzieki,
będę próbował, przecież nie ma rzeczy niemożliwych (chyba smile.gif )
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: 19.07.2025 - 07:28