Výsledky 1 až 9 z 9

Téma: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1
    Terorista karabínový mince Avatar uživatele PiT
    Založen
    13.09.2002
    Bydliště
    Bratislava
    Příspěvky
    4 550
    Vliv
    300

    Standardní MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    Zdravim vospolok.

    Pri robeni jednej webovej aplikacie som narazil na zdanlivo velmi jednoduchy problem, ktory som sice vyriesil (nemam to este natestovane, takze neviem, ci je to 100%ne funkcne riesenie), no neviem si s nim celkovo nejako elegantne/jednoznacne rady.

    Majme

    Tabulka A: id; datum; id2
    1; 2009-12-17 10:12:00; 3
    2; 2010-01-13 12:14:00; 14
    3; 2009-01-13 14:02:44; 3
    4; 2009-07-05 12:00:00; 20
    5; 2009-07-05 12:00:00; 12
    6; 2009-08-01 14:00:00; 20

    Tabulka B: id, datum; id2; hodnota
    1; 2008-10-01; 3; 3000
    2; 2009-01-01; 3; 800
    3; 2009-07-13; 3; 500
    4; 2009-07-26; 3; 300
    9; 2008-04-01; 12; 7500
    10; 2008-10-21; 14; 5000
    20; 2009-07-01; 20; 500
    21; 2009-07-26; 20; 300

    Potrebujem spravit JOIN Tab B na Tab A s tym, ze vysledok bude relevantna hodnota pre dany datum.
    V JOINe teda operujem s A.id=B.id AND SUBSTRING(A.datum,1,10)>=B.datum

    Tzn vysledok by mal vyzerat takto dajako:
    A.id; A.datum; B.datum; A/B.id2; B.hodnota
    1; 2009-12-17 10:12:00; 2009-07-26; 3; 300
    2; 2010-01-13 12:14:00; 2008-10-21; 14; 5000
    3; 2009-01-13 14:02:44; 2009-01-01; 3; 800
    4; 2009-07-05 12:00:00; 2009-07-01; 20; 500
    5; 2009-07-05 12:00:00; 2008-04-01; 12; 7500
    6; 2009-08-01 14:00:00; 2009-07-26; 20; 300

    Haluz je prave ta druha podmienka, s ktorou operujem => A.datum>=B.datum (resp. SUBSTRING(A.datum,1,10)>=B.datum, lebo A.datum je datetime, B.datum je date, ale to je irelevantne)
    pretoze logicky ak mam v Tab B starsie hodnoty pre jedno ID2, tak pre nu vyhovuje viac riadkov. Ja potrebujem vzdy posledny zadany (tzn. s poslednym datumom).

    Nejaky napad ako to elegantne vyriesit? LIMIT 1 pouzit neviem, ci mozem, sam som to vyriesil s vnorenymi join selectami, kde som to najprv ORDERol, potom GROUPol ale GROUP pouzivam tentokrat velmi nerad, lebo GROUPujem podla A.id a spolieham na to, ze zachova vzdy prvu B.hodnota
    Naposledy upravil PiT; 14.01.2010 v 10:36.
    And down we go again, under the relentless wawes, into the arms of calm breakers, into bayou of forgotten dreams
    Like sand slipping through my fingers, nothing ever lasts, ever will

  2. #2

    Standardní Re: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    Tak pokud to vazes takhle primitivne, tak je asi nejlepsi reseni vnoreny select primo do selekce


    SELECT A.*, (SELECT * FROM B WHERE B.DATE > A.DATE LIMIT 1) FROM A;

  3. #3
    Terorista karabínový mince Avatar uživatele PiT
    Založen
    13.09.2002
    Bydliště
    Bratislava
    Příspěvky
    4 550
    Vliv
    300

    Standardní Re: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    Nejako nefunguje...

    Tvoje riesenie vrati

    A.id; A.datum; A/B.id2; B.hodnota; B.datum
    1; 2009-12-17 10:12:00; 3; NULL; NULL
    2; 2010-01-13 12:14:00; 14; NULL; NULL
    3; 2009-01-13 14:02:44; 3; 500; 2009-07-13
    4; 2009-07-05 12:00:00; 20; 500; 2009-07-13
    5; 2009-07-05 12:00:00; 12; 500; 2009-07-13
    6; 2009-08-01 14:00:00; 20; NULL; NULL

    Stve ma na tom to, ze to vyzera trivialne, ale vsetky moje trivialne pokusy zlyhali
    Naposledy upravil PiT; 14.01.2010 v 11:03.
    And down we go again, under the relentless wawes, into the arms of calm breakers, into bayou of forgotten dreams
    Like sand slipping through my fingers, nothing ever lasts, ever will

  4. #4

    Standardní Re: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    použít funkci max(date) v subselectu jsi zkusil?
    Gigabyte GA-MA78G-DS3H, Athlon 64 X2 5050+, 6GB RAM, 2X WD6400AAKS 640GB, integrovaný zvuk i grafika, zdroj SEASONIC S12-550 Energy+, AverTV DVB-T Volar X, Samsung SH-203B, Logitech MX-518

  5. #5
    Terorista karabínový mince Avatar uživatele PiT
    Založen
    13.09.2002
    Bydliště
    Bratislava
    Příspěvky
    4 550
    Vliv
    300

    Standardní Re: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    Citace Původně odeslal kocourleo Zobrazit příspěvek
    použít funkci max(date) v subselectu jsi zkusil?
    Potrebujem najvyssi mensi alebo rovny oproti nejakemu. Nie cisto najvyssi.
    And down we go again, under the relentless wawes, into the arms of calm breakers, into bayou of forgotten dreams
    Like sand slipping through my fingers, nothing ever lasts, ever will

  6. #6
    Administrátor mince Avatar uživatele Jezevec
    Založen
    08.10.2002
    Bydliště
    Teplice
    Příspěvky
    6 738
    Vliv
    300

    Standardní Re: MySQL join 2 tabuliek s podmienkami = a >= za vysledku pre kazdy riadok z 1 TAB

    Hele a co takhle tu druhou podmiku presunout do where ?

    select * from A
    join B on A.id = B.id
    where SUBSTRING(A.datum,1,10)>=B.datum
    IMPROBE AMOR, QUID NON MORTALIA PECTORA COGIS - krutá jsi, lásko, kam až ty doženeš smrtelná srdce -- Vergilius
    Mnoho je prostředků, které léčí lásku, ale žádný není spolehlivý.
    S tím, čeho se na nás dopustili druzí se už nějak vyrovnáme. Horší je to s tím, čeho jsme se na sobě dopustili sami.
    -- Francois La Rochefoucauld
    Nabídnout přátelství tomu, kdo chce lásku, je jako dát chleba tomu, kdo umírá žízní.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •