Likes Likes:  0
Resultaten 1 tot 9 van de 9
Geen
  1. #1
    Maarten Wierda
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    [MySQL] Hulp bij JOIN-query

    Beste nieuwsgroep,

    Ik stuit op een probleem. In een MySQL-database sla ik in 2 tabellen de
    informatie van een quiz op.

    Tabel 'quiz_vraag':

    +----------+-----------------------+-------------+
    | vraag_id | vraag | antwoord_id |
    +----------+-----------------------+-------------+
    | 1 | Hoe heet deze jongen? | 1 |
    +----------+-----------------------+-------------+

    Tabel 'quiz_antwoord':

    +-------------+----------+-----------+
    | antwoord_id | vraag_id | antwoord |
    +-------------+----------+-----------+
    | 1 | 1 | Maarten |
    | 2 | 1 | Sam |
    | 3 | 1 | Tim |
    +-------------+----------+-----------+

    In dit geval is 'Maarten' het antwoord, zie de waarde in 'antwoord_id'
    in de tabel 'quiz_vraag'.

    Nu wil ik met een query alle gegevens hebben waar het vraag_id gelijk is
    aan 1. Hieronder versta ik:

    - de vraag
    - het antwoord_id
    - de antwoorden

    Ik dacht dit als volgt te kunnen doen:

    SELECT
    v.vraag AS vraag,
    a.antwoord_id AS antwoordID,
    a.antwoord AS antwoordTekst,
    v.antwoord_id AS correctAntwoord
    FROM
    quiz_vraag v,
    quiz_antwoord a
    INNER JOIN
    quiz_antwoord
    ON
    v.vraag_id = a.vraag_id
    WHERE
    v.vraag_id = 1

    Eigenlijk verwacht ik dus het volgende resultaat:

    +-----------------------+------------+---------------+-----------------+
    | vraag | antwoordID | antwoordTekst | correctAntwoord |
    +-----------------------+------------+---------------+-----------------+
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    +-----------------------+------------+---------------+-----------------+

    Maar in plaats van 3 resultaten krijg ik maar liefst 18 resultaten
    terug, namelijk 6 maal bovenstaande. Ik post het resulaat toch maar even
    ter verduidelijking:

    +-----------------------+------------+---------------+-----------------+
    | vraag | antwoordID | antwoordTekst | correctAntwoord |
    +-----------------------+------------+---------------+-----------------+
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    | Hoe heet deze jongen? | 1 | Maarten | 1 |
    | Hoe heet deze jongen? | 2 | Sam | 1 |
    | Hoe heet deze jongen? | 3 | Tim | 1 |
    +-----------------------+------------+---------------+-----------------+

    Kan iemand me helpen met het opstellen van mijn query zodat ik 3
    resultaten krijg in plaats van 18?

    Alvast heel erg bedankt.

    --
    Cheers, Maarten Wierda

    "Teenage angst has paid off well, now I'm bored and old"


  2. #2
    Arjen Haayman
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Maarten Wierda wrote:

    >
    > SELECT
    > v.vraag AS vraag,
    > a.antwoord_id AS antwoordID,
    > a.antwoord AS antwoordTekst,
    > v.antwoord_id AS correctAntwoord
    > FROM
    > quiz_vraag v,
    > quiz_antwoord a

    houwe zo

    > INNER JOIN
    > quiz_antwoord
    > ON
    > v.vraag_id = a.vraag_id
    > WHERE
    > v.vraag_id = 1

    zou ik zelf zo doen:
    WHERE v.vraag_id = 1 AND v.vraag_id = a.vraag_id

    groeten,
    Arjen Haayman

    -- cogito ergo bicyclo --


  3. #3
    Maarten Wierda
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Maarten Wierda wrote:

    > SELECT
    > v.vraag AS vraag,
    > a.antwoord_id AS antwoordID,
    > a.antwoord AS antwoordTekst,
    > v.antwoord_id AS correctAntwoord
    > FROM
    > quiz_vraag v,
    > quiz_antwoord a
    > INNER JOIN
    > quiz_antwoord
    > ON
    > v.vraag_id = a.vraag_id
    > WHERE
    > v.vraag_id = 1


    Natuurlijk kan ik gebruik maken van LIMIT, +-

    SELECT
    v.vraag AS vraag,
    a.antwoord_id AS antwoordID,
    a.antwoord AS antwoordTekst,
    v.antwoord_id AS correctAntwoord
    FROM
    quiz_vraag v,
    quiz_antwoord a
    INNER JOIN
    quiz_antwoord
    ON
    v.vraag_id = a.vraag_id
    WHERE
    v.vraag_id = 1
    LIMIT 0,3

    Maar dit is IMHO een *slordige* oplossing. Of heb ik dat mis?

    --
    Cheers, Maarten Wierda

    "Teenage angst has paid off well, now I'm bored and old"


  4. #4
    Ronald Paul
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Maarten Wierda <moart3nAT@chello.nl> schreef:

    >Ik stuit op een probleem. In een MySQL-database sla ik in 2 tabellen de
    >informatie van een quiz op.


    [..]

    >Ik dacht dit als volgt te kunnen doen:
    >
    >SELECT
    > v.vraag AS vraag,
    > a.antwoord_id AS antwoordID,
    > a.antwoord AS antwoordTekst,
    > v.antwoord_id AS correctAntwoord
    >FROM
    > quiz_vraag v,
    > quiz_antwoord a
    >INNER JOIN
    > quiz_antwoord
    >ON
    > v.vraag_id = a.vraag_id
    >WHERE
    > v.vraag_id = 1
    >
    >Eigenlijk verwacht ik dus het volgende resultaat:


    [..]

    >Maar in plaats van 3 resultaten krijg ik maar liefst 18 resultaten
    >terug, namelijk 6 maal bovenstaande.


    In bovenstaande query JOIN je twee keer: vraag met antwoord en met
    antwoord. Het simpel opsommen van twee tabellen gescheiden door een
    komma is ook equivalent aan een INNER JOIN. Aangezien je op deze
    eerste JOIN geen voorwaarde zet, krijg je een cartesisch product
    tussen vraag en antwoord welke dan nog weer een keer 'gejoint' wordt
    met quiz_antwoord.

    Je hebt nu twee mogelijkheden: haal de tweede INNER JOIN weg en
    verplaats de voorwaarde achter ON naar de WHERE (zoals Arjen
    voorstelt), of: verwijder de eerste quiz_antwoord en geef de alias aan
    de andere tabel.

    --
    Groet, Ronald

  5. #5
    Ronald Paul
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Maarten Wierda <moart3nAT@chello.nl> schreef:

    >Natuurlijk kan ik gebruik maken van LIMIT, +-


    [..]

    >INNER JOIN
    > quiz_antwoord
    >ON
    > v.vraag_id = a.vraag_id
    >WHERE
    > v.vraag_id = 1
    >LIMIT 0,3
    >
    >Maar dit is IMHO een *slordige* oplossing. Of heb ik dat mis?


    Nee, hij is erg slordig inderdaad. Nu maak je een succesvolle query
    afhankelijk van de inhoud van de database, en doorgaans is dat niet
    iets wat je zou willen :-)

    --
    Groet, Ronald

  6. #6
    Maarten Wierda
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Arjen Haayman wrote:

    > zou ik zelf zo doen:
    > WHERE v.vraag_id = 1 AND v.vraag_id = a.vraag_id


    Onderstaande query levert inderdaad het gewenste resultaat op:

    SELECT
    v.vraag AS vraag,
    a.antwoord_id AS antwoordID,
    a.antwoord AS antwoordTekst,
    v.antwoord_id AS correctAntwoord
    FROM
    quiz_vraag v,
    quiz_antwoord a
    WHERE
    v.vraag_id = 1
    AND
    v.vraag_id = a.vraag_id

    Kan dit ook in een JOIN-query worden geformuleerd? Of is een JOIN in dit
    geval onnodig?

    --
    Cheers, Maarten Wierda

    "Teenage angst has paid off well, now I'm bored and old"


  7. #7
    Maarten Wierda
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Ronald Paul wrote:

    > In bovenstaande query JOIN je twee keer: vraag met antwoord en met
    > antwoord. Het simpel opsommen van twee tabellen gescheiden door een
    > komma is ook equivalent aan een INNER JOIN. Aangezien je op deze
    > eerste JOIN geen voorwaarde zet, krijg je een cartesisch product
    > tussen vraag en antwoord welke dan nog weer een keer 'gejoint' wordt
    > met quiz_antwoord.


    Cartetisch product, daarvan herinner ik me nog dat van meerdere
    verzamelingen, alle mogelijke tupels worden beschreven als het
    Cartetisch product. Toch nog netjes opgelet tijdens Discrete Wiskunde ;-)

    > Je hebt nu twee mogelijkheden: haal de tweede INNER JOIN weg en
    > verplaats de voorwaarde achter ON naar de WHERE (zoals Arjen
    > voorstelt), of: verwijder de eerste quiz_antwoord en geef de alias aan
    > de andere tabel.


    Ik heb de query nu als volgt geformuleerd en dat werkt prima.

    SELECT
    quiz_vraag.vraag AS vraag,
    quiz_antwoord.antwoord_id AS antwoordID,
    quiz_antwoord.antwoord AS antwoordTekst,
    quiz_vraag.antwoord_id AS correctAntwoord
    FROM
    quiz_vraag
    INNER JOIN
    quiz_antwoord
    ON
    quiz_vraag.vraag_id = quiz_antwoord.vraag_id
    WHERE
    quiz_vraag.vraag_id = 1

    Ronald en Arjen, beiden bedankt. En Ronald ietsje extra wegens de
    heldere uitleg :-)

    --
    Cheers, Maarten Wierda

    "Teenage angst has paid off well, now I'm bored and old"


  8. #8
    John Bokma
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    Maarten Wierda wrote:

    > Arjen Haayman wrote:
    >
    >> zou ik zelf zo doen:
    >> WHERE v.vraag_id = 1 AND v.vraag_id = a.vraag_id

    >
    >
    > Onderstaande query levert inderdaad het gewenste resultaat op:
    >
    > SELECT
    > v.vraag AS vraag,
    > a.antwoord_id AS antwoordID,
    > a.antwoord AS antwoordTekst,
    > v.antwoord_id AS correctAntwoord
    > FROM
    > quiz_vraag v,
    > quiz_antwoord a
    > WHERE
    > v.vraag_id = 1
    > AND
    > v.vraag_id = a.vraag_id
    >
    > Kan dit ook in een JOIN-query worden geformuleerd? Of is een JOIN in dit
    > geval onnodig?


    Wat denk je dat v.vraag_id = a.vraag_id is?

    (hint: een join)

    --
    Kind regards, prachtige ideeen
    John aan het einde van een dal
    stromen dagelijks
    http://johnbokma.com/ gedachtenwaterval


  9. #9
    Maarten Wierda
    [MySQL] Hulp bij JOIN-query
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [MySQL] Hulp bij JOIN-query

    John Bokma wrote:

    > > Kan dit ook in een JOIN-query worden geformuleerd? Of is een JOIN in dit
    > > geval onnodig?

    >
    > Wat denk je dat v.vraag_id = a.vraag_id is?


    Een INNER JOIN, en ik bedoelde natuurlijk een OUTER JOIN.

    --
    Cheers, Maarten Wierda

    "Music is first, lyrics are secondary."

Webhostingtalk.nl

Contact

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