Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [mysql] problem mit group by

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.08.2004
    Beiträge
    17

    [mysql] problem mit group by

    hi,

    ich hab in meiner db eine tabelle für bücher, eine für tags die man den büchern über eine tabelle book_tags zuordnen kann.

    Code:
    SELECT tag_name, COUNT(tag_name)
    FROM tags INNER JOIN tag_book ON tags.tag_id=tag_book.tag_id INNER JOIN books ON tag_book.book_id=books.book_id
    GROUP BY tag_name;
    Die Abfrage spuckt mir jetzt alle tags, jeder mit der anzahl an büchern denen er zugeordnet ist, aus.
    soweit ist das auch gut, aber ich würde mir gerne aus der liste jetzt noch die tags herausfiltern, die einem bestimmten buch zugeordnet sind.
    ich hab es mit folgender abfrage probiert:
    Code:
    ELECT tag_name, COUNT(tag_name)
    FROM tags INNER JOIN tag_book ON tags.tag_id=tag_book.tag_id INNER JOIN books ON tag_book.book_id=books.book_id
    WHERE books.book_id=2
    GROUP BY tag_name;
    aber dann bringt er mir für die jeweilige anzahl von zuweisungen (eigendlich logischerweise) immer 1.

    weiß jemand eine lösung für das problem?


    thx, cypher

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Für welches Problem denn? Es ist (wie Du ja schon schreibst) völlig logisch, dass da immer eine 1 kommt - die Tag-Namen für 1 Buch sind doch eindeutig, oder? Wenn Du wissen willst, wieviele Tags insgesamt für ein Buch existieren, dann darf natürlich der Tag-Name in der Abfrage nicht mehr auftauchen (er ist ja eindeutig), Du musst 2 separate Abfragen oder einen umfunktionierten Join benutzen (ungetestet):
    Code:
    -- Variante 1: 2 Abfragen
    -- 1. Abfrage: die Tags
    SELECT tag_name
    FROM tags INNER JOIN tag_book ON tags.tag_id=tag_book.tag_id INNER JOIN books ON tag_book.book_id=books.book_id
    WHERE books.book_id=2;
    -- 2. Abfrage: Die Anzahl
    SELECT count(tag_id)
    FROM tag_book INNER JOIN books ON tag_book.book_id=books.book_id
    WHERE books.book_id=2;
    -- Union
    SELECT tag_name, 1 anzahl
    FROM tags INNER JOIN tag_book ON tags.tag_id=tag_book.tag_id INNER JOIN books ON tag_book.book_id=books.book_id
    WHERE books.book_id=2
    union
    SELECT 'Gesamt' tag_name, count(tag_id)
    FROM tag_book INNER JOIN books ON tag_book.book_id=books.book_id
    WHERE books.book_id=2
    group by tag_name;
    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.08.2004
    Beiträge
    17
    danke, habe es jetzt mit zwei seperaten abfragen gemacht.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •