php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.06.2004, 11:33  
Gast
 
Beiträge: n/a
Standard [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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.06.2004, 14:45  
Gast
 
Beiträge: n/a
Standard

weiß keiner ne Lösung?
  Mit Zitat antworten
Alt 06.06.2004, 15:56  
Gast
 
Beiträge: n/a
Standard

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'
  Mit Zitat antworten
Alt 15.06.2004, 08:27  
Gast
 
Beiträge: n/a
Standard

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.
  Mit Zitat antworten
Alt 17.06.2004, 00:40  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 146
Hakima befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Zitat:
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.
Hakima ist offline   Mit Zitat antworten
Alt 17.06.2004, 09:37  
Gast
 
Beiträge: n/a
Standard

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...
  Mit Zitat antworten
Alt 17.06.2004, 09:58  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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.
Guradia ist offline   Mit Zitat antworten
Alt 17.06.2004, 17:19  
Gast
 
Beiträge: n/a
Standard Re: Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN

Zitat:
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.
  Mit Zitat antworten
Alt 18.06.2004, 13:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 146
Hakima befindet sich auf einem aufstrebenden Ast
Standard

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
Hakima ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
WHERE-Clause im Left Join cycap Datenbanken 2 06.11.2007 11:06
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
[solved] LEFT JOIN - #1066 - Not unique table/alias moose Datenbanken 6 12.12.2006 06:41
[gelöst] LEFT JOIN und trotzdem nicht alle Sätze da?!? stefanjann Datenbanken 3 24.10.2006 11:32
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
INNER JOIN + Suchkriterien + Abfrage duerov PHP Tipps 2006 4 04.04.2006 12:47
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
[Erledigt] LEFT JOIN funtkioniert nicht richtig Datenbanken 3 19.10.2005 17:38
zwei left joins in einer abfrage Datenbanken 2 19.05.2005 16:26
[Erledigt] left outer join mit bedingung Datenbanken 2 04.03.2005 00:52
[Erledigt] bin nicht bsonders gut in php und sql queries left join prob Datenbanken 7 28.09.2004 16:50
den letzte(grösten) eintrag aus LEFT JOIN Datenbanken 2 24.07.2004 18:33
SQL Abfrage mit LEFT JOIN -> OK, aber ich komm net weiter PHP-Fortgeschrittene 3 04.06.2004 00:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mehrere count in einer abfrage, left join count, join count, join von zwei abfragen, sql query count zwei bedingungen, mehrere counts in einer abfrage, sql join zählen, count join php, left join count werte, sql mehrere counts abfrage, sql mehrere counts, left join mehrere zeilen, join anzahl einträge, sql abfrage zählen, mehrere select count abfrage, join und anzahl der datensätze, mehrere counts in einem select, google sql 2 counts in einer abfrage, 2 count in einer abfrage, google 1 count abfragen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.