Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

Ir divas tabulas kvitis un darbibas.

tabula kvitis.

id nosaukums

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

1 nos1

2 nos2

3 nos3

 

tabula darbibas

id kvits_id darbiba

1 1 pag.

2 1 sav.

3 3 pag.

4 1 atgr.

5 3 sav.

 

Ka lai dabu ierakstus par kvitim no pirmas tabulas un otras tabulas kur otras tabulas ieraksta pedeja darbiba = pag. Man ir risinajums bet viņš man nepatik. Varbut ir kads gudraks risinajums.

 

EDITED

Edited by localhero
Posted (edited)

Iespējams, ka risinājums tāds pats kā tu esi izdomājis, bet vienkāršāku nezinu:

SELECT k.*, b.*
FROM kvitis k
LEFT JOIN darbibas b ON (
k.id = b.kvits_id
)
ORDER BY b.id DESC LIMIT 1

Edited by andrisp
Posted (edited)

select k.nosaukums, d.darbiba from kvitis k left join darbibas d on k.id = d.kvits_id ORDER BY d.id desc LIMIT 0, 1

 

edit: andrisp, pasteidzās pirmais :)

Edited by Vebers
Posted

Ja vari garantēt, ka darbibas.id vienmēr būs lielāka vērtība jaunākai kvītij, tad:

SELECT k.id, k.nosaukums, d.id, d.kvits_id, d.darbiba FROM kvitis AS k LEFT JOIN darbibas AS d ON k.id = d.kvits_id WHERE d.id IN (SELECT max(d2.id) FROM darbibas AS d2 WHERE d2.kvits_id = k.id)

Posted
Ka lai dabu ierakstu par kviti no pirmas tabulas un pedejo ierakstu par to pašu kviti no otras tabulas. Man ir risinajums bet viņš man nepatik. Varbut ir kads gudraks risinajums.

 

BTW jautājums - vienam konkrētam ierakstam kvīšu tabulā vai visiem?

Posted (edited)

Gints visiem ierakstiem. tobiš izmet tos kvits.id kuriem tabulā darbības pēdējais ieraksts ir pag. Es laikam neskaidri uzrakstiju gruti noformulet sori.

Edited by localhero
Posted
Es laikam neskaidri uzrakstiju gruti noformulet.

Grūti noformulēt ko - to vai tev šo rezultātu vajag vienam konkrētam zināmam ierakstam (pēc kvīts id piemēram) vai arī vairākiem pēc kārtas (nu varbūt kaut kādi kritēriji ir protams)

:)

Posted (edited)

Vispār neviens jūsu varinats nestrādās (izņemot ar SUBSELECT), jo

Ka lai dabu ierakstus par kvitim

nekādi LIMIT nelīdzēs.. atgriezīs tikai vienu kvīti

 

Ja grib visu selektēt optimizēti, tad kvīšu darbībām jāliek papildus lauks... "pēdējais"... atjaunot to pie inserta

 

TRIGER_BEFORE_INSERT
START
  UPDATE KVITS_DARBIBAS
  SETTING IS_LAST = 0
  WHERE kvits_id = current_record.kvits_id AND darbibas_tips = current_record.darbibas_tips
END

 

Vēlāk vienkārši smuks selekts ;)

Edited by Delfins
Posted

Varēji jau pirmo postu needitēt, bet vnk jaunu komentāru ierakstīt...

select k.nosaukums, d.darbiba from kvitis k left join darbibas d on k.id = d.kvits_id where d.darbiba='pag.' ORDER BY d.id desc LIMIT 0, 1

Posted
Vispār neviens jūsu varinats nestrādās (izņemot ar SUBSELECT), jo

nekādi LIMIT nelīdzēs.. atgriezīs tikai vienu kvīti

nu re te jau paceļās jautājums vai vajag par vienu ierakstu vai vāirākiem.

 

Un parādās arī MySQLa trūkumi - nav analītisko f-ju piemēram row_number() :)

Būtu analītiskās f-jas varētu vismaz source tabulas skanēt tikai 1 reizi.

 

Gints Plivna

http://datubazes.wordpress.com

×
×
  • Create New...