Likes Likes:  0
Resultaten 1 tot 8 van de 8
Geen
  1. #1
    PanMan
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    [mysql] Join met lege rij'en weergeven?

    Hoi!
    Nu ik terug ben in NIWSS, heb ik ook gelijk een vraagje
    Ik heb een db met 2 tables: vacatures en vakgebieden. Vakgebieden
    hebben een naam en een id, en vacatures linken (met het veld
    vakgebied) naar een vakgebied_id.
    Nu wil ik een lijstje van vakgebieden maken. Dat doe ik met

    select vakgebieden.*, count(vacatures.vacature_id) as aantal
    from vacatures, vakgebieden
    where vakgebieden.vakgebied_id=vacatures.vakgebied
    GROUP BY vakgebieden.vakgebied_id
    order by naam;

    Dit geeft geen vakgebieden die geen vacatures hebben. Dat is voor
    sommige dingen inderdaad erg praktisch. Maar ik wil ergens anders ook
    deze wel tonen (waar de count dus 0 oplevert).
    Hoe doe ik dit? Ik kan het natuurlijk oplossen door een simpele select
    * from vakgebieden, en dan bij elke rij met een apparte query de
    vacatures opvragen (met een simpele select count(*) from vacatures
    where vakgebied=$id''). Maar dat vind ik een minder mooie oplossing.
    Kan dit ook in 1 query?
    Thnx!
    PanMan.

  2. #2
    Maarten Wierda
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    PanMan wrote:

    > Hoi!


    Hoi,

    > Nu ik terug ben in NIWSS, heb ik ook gelijk een
    > vraagje


    Dat kan.

    > Ik heb een db met 2 tables: vacatures en
    > vakgebieden. Vakgebieden hebben een naam en een id, en
    > vacatures linken (met het veld vakgebied) naar een
    > vakgebied_id. Nu wil ik een lijstje van vakgebieden
    > maken. Dat doe ik met


    <snip query>

    > Dit geeft geen vakgebieden die geen vacatures hebben. Dat
    > is voor sommige dingen inderdaad erg praktisch. Maar ik
    > wil ergens anders ook deze wel tonen (waar de count dus 0
    > oplevert). Hoe doe ik dit?


    Dat kan met 'left join'. Als ik het goed heb selecteer je
    met 'left join' alle resultaten uit de 'eerste' tabel /en/
    alle resultaten uit de 'tweede' tabel, ook als deze NULL
    opleveren.

    Probeer eens +-

    SELECT
    v.*,
    g.*
    FROM
    vacatures AS v
    LEFT JOIN
    vakgebieden AS g
    ON
    v.id = g.id

    (niet getest)


    --
    Cheers,
    Maarten Wierda

    "Shit happens. Then you wipe."

  3. #3
    Rene Pijlman
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    PanMan:
    >Hoi!


    Hoi2u2 PanMan!

    >select vakgebieden.*, count(vacatures.vacature_id) as aantal
    >from vacatures, vakgebieden
    >where vakgebieden.vakgebied_id=vacatures.vakgebied
    >GROUP BY vakgebieden.vakgebied_id
    >order by naam;
    >
    >Dit geeft geen vakgebieden die geen vacatures hebben. Dat is voor
    >sommige dingen inderdaad erg praktisch. Maar ik wil ergens anders ook
    >deze wel tonen (waar de count dus 0 oplevert).
    >Hoe doe ik dit?


    Ik vertik het om uit te zoeken of MySQL het ondersteunt, maar bij
    volwaardige databases zoals PostgreSQL doe je dat met een left outer join:

    select ...
    from vacatures left outer join vakgebieden
    on vakgebieden.id = vacatures.vakgebied
    where ...

    --
    René Pijlman

    Wat wil jij leren? http://www.leren.nl

  4. #4
    PanMan
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    On Mon, 04 Apr 2005 23:56:49 +0200, Maarten Wierda
    <moart3nAT@chelloDOT.nl> wrote:

    >PanMan wrote:
    >
    >> Ik heb een db met 2 tables: vacatures en
    >> vakgebieden. Vakgebieden hebben een naam en een id, en
    >> vacatures linken (met het veld vakgebied) naar een
    >> vakgebied_id. Nu wil ik een lijstje van vakgebieden
    >> maken. Dat doe ik met

    >
    ><snip query>
    >
    >> Dit geeft geen vakgebieden die geen vacatures hebben. Dat
    >> is voor sommige dingen inderdaad erg praktisch. Maar ik
    >> wil ergens anders ook deze wel tonen (waar de count dus 0
    >> oplevert). Hoe doe ik dit?

    >
    >Dat kan met 'left join'. Als ik het goed heb selecteer je
    >met 'left join' alle resultaten uit de 'eerste' tabel /en/
    >alle resultaten uit de 'tweede' tabel, ook als deze NULL
    >opleveren.
    >
    >Probeer eens +-
    >
    >SELECT
    > v.*,
    > g.*
    >FROM
    > vacatures AS v
    >LEFT JOIN
    > vakgebieden AS g
    >ON
    > v.id = g.id
    >
    >(niet getest)

    Hrmz, ik heb het wel ff getest. Count toegevoegd, maar dan werkt het
    niet...

    SELECT
    count(v.vacature_id),
    g.*
    FROM
    vacatures AS v
    LEFT JOIN
    vakgebieden AS g
    ON
    v.vakgebied = g.vakgebied_id
    GROUP BY g.vakgebied_id

    Ik krijg dus, net zoals met mijn eigen query, alleen rij'en waar de
    count >0 is.

    Dat gebruik van aliassen is wel nice.
    Ik zal er morgen ff verder in duiken, die left join.
    Groeten,
    PanMan.

  5. #5
    Rene Pijlman
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    PanMan:
    >>LEFT JOIN

    [...]
    >Ik krijg dus, net zoals met mijn eigen query, alleen rij'en waar de
    >count >0 is.


    Maarten en jij onderschatten het belang van het keyword 'OUTER'. Dat zal
    er wel mee te maken hebben dat de MySQL-documentatie er geen woord aan
    wijdt, i.i.g. niet op http://dev.mysql.com/doc/mysql/en/join.html waarnaar
    ik ondanks stevige weerzin toch even gekeken heb.

    Voeg het toch maar eens toe ("left outer join"), wie weet wordt dit door
    MySQL daadwerkelijk ondersteund.

    --
    René Pijlman

    Wat wil jij leren? http://www.leren.nl

  6. #6
    Maarten Wierda
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    PanMan wrote:

    >>Dat kan met 'left join'. Als ik het goed heb selecteer je
    >>met 'left join' alle resultaten uit de 'eerste' tabel /en/
    >>alle resultaten uit de 'tweede' tabel, ook als deze NULL
    >>opleveren.
    >>
    >>Probeer eens +-


    <snip query>

    > Hrmz, ik heb het wel ff getest. Count toegevoegd, maar dan werkt het
    > niet...


    Opes, ik zie nu pas dat je ook een heel andere vraag stelde. Ik zat te
    denken aan een lijstje met vacatures en eventueel het bijbehorende
    vakgebied. Onderstaande query doet wel wat je wil:

    SELECT
    g.*,
    v.*,
    FROM
    vakgebied AS g
    LEFT JOIN
    vacature AS v
    ON
    g.id = v.vakgebiedid

    Je kunt natuurlijk ook COUNT toevoegen maar dan krijg je +- onderstaande
    resultaat:

    id naam id vakgebiedid naam COUNT(v.id)
    3 gebied3 NULL NULL NULL 0
    1 gebied1 1 1 vac1 1
    2 gebied2 2 2 vac2 1
    1 gebied1 4 1 vac4 1


    (wel getest)

    --
    Cheers,
    Maarten Wierda

    "Shit happens. Then you wipe."

  7. #7
    Maarten Wierda
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    Rene Pijlman wrote:

    >>>LEFT JOIN

    >
    > [...]
    >
    >>Ik krijg dus, net zoals met mijn eigen query, alleen rij'en waar de
    >>count >0 is.

    >
    > Maarten en jij onderschatten het belang van het keyword 'OUTER'.


    Nee hoor, ik ben tot nu toe altijd in de veronderstelling geweest dat je
    INNER en OUTER JOINs hebt en dat OUTER JOINs bestan uit LEFT en RIGHT
    JOINs. Maar wees gerust, ik ben dan ook geen database-expert.

    > Voeg het toch maar eens toe ("left outer join"), wie weet wordt dit door
    > MySQL daadwerkelijk ondersteund.


    Geeft hier hetzelfde resultaat als wanneer ik OUTER weglaat (getest met
    query uit vorige post).

    --
    Cheers,
    Maarten Wierda

    "Shit happens. Then you wipe."


  8. #8
    PanMan
    [mysql] Join met lege rij'en weergeven?
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [mysql] Join met lege rij'en weergeven?

    On Tue, 05 Apr 2005 14:05:02 +0200, Maarten Wierda
    <moart3nAT@chelloDOT.nl> wrote:

    >PanMan wrote:
    >
    >Opes, ik zie nu pas dat je ook een heel andere vraag stelde. Ik zat te
    >denken aan een lijstje met vacatures en eventueel het bijbehorende
    >vakgebied. Onderstaande query doet wel wat je wil:
    >

    [snip]
    >
    >Je kunt natuurlijk ook COUNT toevoegen maar dan krijg je +- onderstaande
    >resultaat:

    [snip]
    >(wel getest)


    Woei!
    Na nog wat geklooi (stond een komma verkeerd, en er waren nog wat rare
    fouten, maar ik heb het nu inderdaad werkend!
    Heb nu dit:

    SELECT
    g.*,
    count(v.vacature_id)
    FROM
    vakgebieden AS g
    LEFT JOIN
    vacatures AS v
    ON g.vakgebied_id = v.vakgebied
    GROUP BY g.vakgebied_id

    Dat geeft een resultaat alla:
    +--------------+-----------------------+----------------------+
    | vakgebied_id | naam | count(v.vacature_id) |
    +--------------+-----------------------+----------------------+
    | 1 | ICT & Dienstverlening | 2 |
    | 3 | horeca | 3 |
    | 4 | Testgebied | 1 |
    | 6 | Leeggebied | 0 |
    +--------------+-----------------------+----------------------+

    Thnx!
    Groeten,
    PanMan.
    (die laatst een oplossing voor een probleem in z'n eigen post uit '99
    in het google archief vondt, en dus opgeloste problemen vaker gaat
    posten ).

Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2026 Webhostingtalk.nl.
Web Statistics