Alle einträge von einem Zusammenzählen

  • Themenstarter Themenstarter FortunaFan
  • Beginndatum Beginndatum
F

FortunaFan

Hallo,

ich habe ein Download Script, wo man mit seinem Namen Downloads hinzufügen kann. Jeder User hat seine ID. Und bei jedem Download ist der Name von dem, der es hinzugefügt hat in der Datenbank gespeichert. In meinem Fall heißt die Spalte "poster". Die Downloads sind in verschiedenen Gruppen aufgeteilt Spalte "gruppeid". Wie kann man jetzt von einem anzeigen lassen wieviel er in allen Gruppen hinzugefügt hat? Möglich ist es, ich weiß aber absolut nicht wie. Bin noch in der Lernphase, daher wären Kommentare wieso jetzt dieser Befehl kommt usw. Sehr nett aber nicht notwendig.

Mfg, FortunaFan
 
Nenne bitte Dein Datenbanksystem und beschreibe übersichtlich die Tabellenstruktur (Tabellenname, Felder, Feldtyp, Bedeutung des Feldes, Assoziationen).
Man muss es den Helfern ja nicht unnötig schwer machen ;)

Gruß hpvw
 
Hast du ICQ`? Dann gebe ich dir mal die Zugansdaten, weil bis dass ich das alles hier reingeschrieben habe... Fallen mir schon meine Sackhaare ab ; )...
 
ICQ habe ich nicht, aber Du könntest die CREATE-Anweisungen posten. Sollten ja vermutlich nicht mehr als drei Tabellen sein.
Welche Datenbank ist es denn nun? Sollte es MySQL sein, bitte auch die Version.
 
Versuchs mal so irgendwie:
Code:
SELECT COUNT
    (`userid`)
FROM
    `deineTabelle`
WHERE
    `userid` = '$dieUserID'
greetz
daddz
 
Oben auf Exportieren, die richtigen Tabellen auswählen, das hätte gereicht:
Code:
-- phpMyAdmin SQL Dump
-- version 2.6.0-pl3
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Erstellungszeit: 06. Juni 2005 um 21:40
-- Server Version: 4.0.23
-- PHP-Version: 4.3.8
-- 
-- Datenbank: `smeagol`
-- 

-- --------------------------------------------------------

-- 
-- Tabellenstruktur für Tabelle `cm_dl_gruppen`
-- 

CREATE TABLE `cm_dl_gruppen` (
  `id` int(11) NOT NULL auto_increment,
  `gruppe` varchar(40) default NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Tabellenstruktur für Tabelle `cm_dl_info`
-- 

CREATE TABLE `cm_dl_info` (
  `id` int(11) NOT NULL auto_increment,
  `gruppeid` int(11) default NULL,
  `name` varchar(100) default NULL,
  `lang` varchar(40) default NULL,
  `pic` varchar(100) default NULL,
  `info` text,
  `poster` varchar(100) default NULL,
  `downloads` int(11) default NULL,
  `bewertung` int(11) default NULL,
  `zeit` varchar(50) default NULL,
  `bewerter` int(11) default NULL,
  `quality` varchar(20) default NULL,
  `ishow` int(11) default NULL,
  `genre` varchar(30) default NULL,
  `seeder` int(10) unsigned default NULL,
  `leecher` int(10) unsigned default NULL,
  `lastupdate` varchar(20) default NULL,
  `pswd` varchar(50) default NULL,
  `deadsince` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Tabellenstruktur für Tabelle `cm_dl_users`
-- 

CREATE TABLE `cm_dl_users` (
  `id` int(11) NOT NULL auto_increment,
  `nick` varchar(40) default NULL,
  `pass` varchar(40) default NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
PHPMyAdmin ist ja richtig hübsch geworden, da muss ich mir wohl mal 'ne neue Version zulegen ;)
Du solltest in der info-Tabelle nicht auf den Nickname (mit poster) verweisen, sondern auf die ID des Users.
Bei Deiner jetzigen Struktur würde das funktionieren:
Alle DLs eines Users:
Code:
SELECT 
#Den Poster muss man wissen, daher 
#kommt er ins Select
poster, 
#Alle Zeilen nach der unten stehenden 
#Gruppierung zählen, dabei wird auf
#eine Zeile reduziert.
#Dazu ein Aliasname, damit es eine 
#sinnvolle Beschreibung des "künstlichen"
#Feldes gibt
COUNT(*) AS `gepostete Downloads` 
#Tabelle auswählen
FROM cm_dl_info 
#Nach dem Poster gruppieren
GROUP BY poster
#Absteigend nach der Anzahl 
#Downloads gruppieren
ORDER BY `gepostete Downloads` DESC
Noch aufgeschlüsselt nach Gruppen:
Code:
SELECT
#Wir benötigen die Gruppenbezeichnung
#aus der entsprechenden Tabelle
cm_dl_gruppen.gruppe, 
#Wieder den Namen des Posters
cm_dl_info.poster, 
#und zählen müssen wir auch wieder
COUNT( * ) AS `gepostete Downloads`
#Basis ist wieder die Info-Tabelle
FROM cm_dl_info
#Die Verknüpfen wir mit der
#Gruppentabelle (JOIN = kartesisches Produkt)
#LEFT JOIN bedeutet, die Zeile aus der linken 
#(zuerst genannten) Tabelle wird auf jeden
#Fall übernommen
#Gibt es keinen zu der On-Klausel passenden
#Eintrag in der rechten Tabelle, werden die 
#Felder der rechten Tabelle null gesetzt
LEFT JOIN cm_dl_gruppen 
#Die Bedingung der Verknüpfung ist 
#selbstverständlich die gruppeid und die id
# der Gruppen-Tabelle
ON ( cm_dl_info.gruppeid = cm_dl_gruppen.id )
#diesmal Gruppieren wir nach beiden Kriterien
GROUP BY poster, gruppe
#Sortieren tun wir zuerst nach der Gruppe
#damit alle Downloads zu einer Gruppe 
#zusammen stehen, danach wieder nach der
#Anzahl der geposteten Einträge
ORDER BY gruppe, `gepostete Downloads` DESC
Gruß hpvw
 
Hat geklappt, n1!

Für andere:

PHP:
SELECT poster, COUNT(*) AS `posts` FROM cm_dl_info GROUP BY poster ORDER BY `posts` DESC
 
FortunaFan hat gesagt.:
Hat geklappt, n1!

Für andere:

PHP:
SELECT poster, COUNT(*) AS `posts` FROM cm_dl_info GROUP BY poster ORDER BY `posts` DESC

Also entweder alle Feldnamen mit Backsticks (`) versehen, oder gar keines.
So siehts unmöglich aus.

Also entweder
SELECT `poster`, COUNT(*) AS `posts` FROM `cm_dl_info` GROUP BY `poster` ORDER BY `posts` DESC;
oder
SELECT poster, COUNT(*) AS posts FROM cm_dl_info GROUP BY poster ORDER BY posts DESC;

P.S.: Markier das Thema bitte noch als "erledigt", danke.
 
Zurück