![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 3.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam 2 tabele.. jedna to tabela z towarami, druga z diagnostykami (przy czym w tej drugiej moze byc X rekordow dotyczacych jednego towaru)
moje pytanie to jak napisac zapytanie ktore by wyciagalo dane dotyczace towaru + ostatnia z diagnostyk dotyczaca tego towaru. Struktura bazy: [sql:1:bafb259a7c] CREATE TABLE goods ( id int(11) NOT NULL auto_increment, id_client int(11) NOT NULL default '0', goods_name varchar(128) NOT NULL default '', place varchar(16) default NULL, sn varchar(32) NOT NULL default '', nr_rachunku varchar(32) NOT NULL default '', destription blob NOT NULL, data_in date NOT NULL default '0000-00-00', worker int(11) NOT NULL default '0', PRIMARY KEY (id), UNIQUE KEY id (id) ) TYPE=MyISAM PACK_KEYS=0 CHECKSUM=1 AUTO_INCREMENT=31 ; CREATE TABLE diagnostyki ( id int(11) NOT NULL auto_increment, id_goods int(11) NOT NULL default '0', diagnoza text NOT NULL, worker int(11) NOT NULL default '0', data timestamp(14) NOT NULL, PRIMARY KEY (id), UNIQUE KEY id (id) ) TYPE=MyISAM AUTO_INCREMENT=94 ; [/sql:1:bafb259a7c] Ja wykombinowalem takie cos [sql:1:bafb259a7c] select goods.id,goods.goods_name,diagnostyki.diagnoza from goods,diagnostyki where diagnostyki.id_goods=goods.id ORDER by id; [/sql:1:bafb259a7c] jednak wykorzystuje on wszytkie diagnostyki dla danego towaru.. a mnie interesuje tylko ostatnia. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
<wiedza_tajemna>
dziala to wedlug takiej zasady: 1. bierzemy id z tabeli podrzednej (diagnostyki.id) 2. konwertujemy tego id na stringa i lpadem wyrownujemy do 11 znakow uzupelniajac zerami z lewej strony (int moze miec max 11 znakow o ile nie jest big) 3. do tego stringa concatem doklejamy ciag znakow ktory chcemy uzyskac (czyli diagnostyki.diagnoza) 4. w mysql-u max i min dzialaja rowniez na stringach, wiec wykorzystujac max-a z danej grupy bierzemy ten string ktory alfabetycznie jest najstarszy, a poniewaz pierwsze 11 znakow to nasz id to oznacza ze bierzemy wiersz w ktorym bylo najwieksze id, a poniewaz sortujemy alfabetycznie to musielismy uzupelnic zerami ( bo co prawda 11>9, ale '11'<'9', a po uzupelnieniu znow '11'>'09') 5. substringiem pomijamy pierwsze 11 znakow wyniku, biorac string od znaku 12-stego. 6. cieszymy sie wynikiem. </wiedza_tajemna> Tak w ogole to ten grzyb jest wziety z manuala MySQL-owego. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 18:43 |