Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN

    Hallo,

    ich sitze momentan an einem bzw mehreren Probleme beim Zählen von Datensätzen.
    Das Problem dabei ist das ich eine Tabelle mit daten habe => wie folgt:

    uid => bigint(20) => Userid des Empfängers
    text => varchar(80) => Bewertungstext
    date => bigint(20) => Unix Timestamp
    anr => bigint(20) => Angebotsnummer
    art => tinyint(1) => Art der Bewertung 1 = positiv, 2 = neutral, 3 = negativ
    geber => bigint(20) => Userid des Bewerters

    Wie ihr jetzt sicher erkannt habt, geht es um eine Bewertung ähnlich EBAY.

    Wenn ich nun sage ich möchte mir die Bewertungen der Userid 1 anzeigen lassen, so muss folgendes selecttiert werden.

    anzahl aller Bewertungen
    Anzahl der bewertungun unterschiedlicher mitglieder
    Anzahl der positiven Bewertungen unterschiedlicher mitglieder
    Anzahl der Positien
    anzahl der positiven letzte monat, der letzt5en 6 und der letzte 12

    das was mit den positivern passiert brauch ich logischerweise auch für die negativen und neutralen.

    Ich hab es jedoch leider nicht geschafft jeweils positive mit einem mal abzufragen , dann stimmten die ergebnisse nicht mehr
    jedoch funktioniert es die anzahl aller Bewertungen und die Anzahl der Bewertungen von unterschiedlichen mitgliedern mit einer Abfrage zu selectieren.

    Habt ihr da ideen und könnt mir etwas weiterhelfen????

    Danke


  • #2
    weiß keiner ne Lösung?

    Kommentar


    • #3
      mit count geht das so, wie du möchtest imho nicht in einer Abfrage.
      bei einem join erzeugst du ja quasi nur eine "temporäre" Tabelle, in der du dann z.b. count ausführst. da du aber quasi mehrere where Bedingungen bräuchtest musst du auch mehrere Queries ausführen, wo ich aber nicht sehe, dass das ein Problem wäre!
      mach doch einfach
      Code:
          select 
              count(id) 
          from 
              bla 
          where 
              bewertung = 'toll'
              AND u_id = '1'
      
          select 
              count(id) 
          from 
              bla 
          where 
              bewertung = 'naja'
              AND u_id = '1'
      
          select 
              count(id) 
          from 
              bla 
          where 
              bewertung = 'mies' 
              AND u_id = '1'

      Kommentar


      • #4
        wie ImPAcT schon sagt, mit count kommst du nicht an das von dir gewollten ran.

        Wenn du schön alles in eine Abfrage erledigt haben willst, musst du deine Gedanken und entsp. deine Tabelle neustrukturieren.
        Zahlenkombis sind manchmal sehr hilfreich.

        Kommentar


        • #5
          Hallo,

          Zitat von mcjoin
          wie ImPAcT schon sagt, mit count kommst du nicht an das von dir gewollten ran.
          Ich kann dazu nur sagen, dass die Lösung mit count(*) o.k. ist bei mehreren Abfragen hintereinander mit If-Klauseln oder cases.

          Ein Tipp zur Darstellung von Datumswerten:
          Code:
          select DATE_SUB('1998-01-30', Interval 1 month)
          Auf diese Art und Weise können Monate von einem bestimmten Datum abgezogen werden.
          http://dev.mysql.com/doc/mysql/de/Da...functions.html

          Gruß,

          Kamalo.

          Kommentar


          • #6
            Man kann es schon noch etwas praktischer hinkriegen, allerdings wird bei count automatisch grupiert, d.h. man kann nicht in einer Abfrage (alles) zählen und auch Zugriff auf jeden Datensatz bekommen, aber das geht:

            Code:
                SELECT
                    bewertung, 
                    count(id) 
                FROM 
                    `bla` 
                WHERE 
                    u_id = 1 
                GROUP BY 
                    bewertung
            Die Ergebnistabelle ist dann bei dir 3 Zeilen lang, Attr. 0: Welche Bewertung, Attr. 1: Anzahl.... du kannst natürlich dann in die Where Bedingung noch Datum o.ä. einfügen...

            Kommentar


            • #7
              Zitat von ImPAcT
              Man kann es schon noch etwas praktischer hinkriegen, allerdings wird bei count automatisch grupiert, d.h. man kann nicht in einer Abfrage (alles) zählen und auch Zugriff auf jeden Datensatz bekommen,
              Right .. allerdings ist das ein Thema, das beim Nachdenken Kopfschmerzen macht und auch nicht sonderlich gut zu erklären ist ^^

              allerdings gäbe es noch
              COUNT( DISTINCT ...)
              was manchmal das Problem beseitigt.

              Kommentar


              • #8
                Re: Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN

                Zitat von Scyks
                ich sitze momentan an einem bzw mehreren Probleme beim Zählen von Datensätzen.
                [...]
                Habt ihr da ideen und könnt mir etwas weiterhelfen????
                Das Konzept ist nicht gut durchdacht. Du benötigst die Auswertung wesentlich öfter als die Eingabe einer Bewertung. Es wäre daher sinnvoller, wenn Du die Angaben bei der Eingabe gleich so verwertest, wie Du sie bei der Ausgabe benötigst.

                Kommentar


                • #9
                  Hallo,

                  vielleicht ist es sinnvoll, statt mit einer, mit 2 Tabellen zu arbeiten. Kennst Du das Vorgehen mit Primärschlüssel und Fremdschlüssel? Beispielsweise kannst Du einen Primärschlüssel für die Userid des Bewerters nehmen und diesen wieder als Fremdschlüssel in der 2. Tabelle speichern. So können zu jedem Bewerter strukturiert Daten gespeichert werden. M.E. ist der Zugriff auf Daten so einfacher.

                  Sag uns doch, wie weit Du bist, oder wie Du vorgegangen bist? (Ist ja jetzt schon `ne Weile her...

                  Gruß,

                  Kamalo

                  Kommentar

                  Lädt...
                  X