Mysql Tabellen einträge addieren lassen

Tobias Staffel

Grünschnabel
Guten Tag

Und zwar Arbeite ich gerade an einem CMS und bin gerade beim Download bereich, in den soll es möglich sein Parts hochzuladen und zu Downloaden.

Meine Vorgehnsweiße:
Ich habe 2 Tabellen, einmal (dlname) und (downloads) in die dlname wird der Name des downloads gespeichert somit verhindere ich das der Download nicht mehrmals in der Download liste erscheint. Um jetzt zu dem Richtigen Download zu kommen, habe ich in der Download Tabelle einen Spalt mit Name dadurch lässt er sich nun Aufrufen.

Mein Problem:
Wenn jetzt mehrere Parts hochgeladen sind, muss die Gesamte Größe berechnet werden dafür muss ich alle einträge aus der Tabelle holen wo der Download name = dem Download ist und diesen Addieren. Nur habe ich keine Ahnung wie ich das bewerkstelligen könnte.

Deswegen meine frage, wie kann ich nun die Gesamt Größe berechnen kann.
 
Mit GROUP BY und SUM

SQL:
SELECT
    name,
    SUM(groesse) AS total_groesse,
    COUNT(*) AS anzahl_teile
FROM
    my_table
GROUP BY
    name
 
Zuletzt bearbeitet von einem Moderator:
Da ich mit Count und SUM und GROUP BY noch nicht gearbeitet habe,
weiß ich noch nicht wie ich damit umgehen soll deswegen dachte ich mir schreib ich mal wie ichs jetzt stehen habe


PHP:
function getDownload($dname,$infos){
    $uploader = $_GET['uploader'];
    $query = "SELECT * FROM `downloads` WHERE `name`='$dname' and `uploader`='$uploader' ";
    $result = mysql_query($query);    
    $query2 = "SELECT `name` SUM(filesize) as total_groesse, COUNT(*) AS anzal_teile FROM `downloads` GROUP BY `name` WHERE `name`='$dname' ";
    $result2 = mysql_query($query2);
    $row = mysql_fetch_array($result);
    
    $test = mysql_fetch_array($result2);
    
    
    $data = array(
        'name' => $row['name'],
        'uploader' => $row['uploader'],
        'filesize' => $total_groesse,
        'filename' => $row['filename'],
        'dlc' => $row['dlc'],
        'image' => $row['image'],
        'info' => nl2br($row['info'])
    );
    
    
    
    return $data[$infos];
}
 
item: Ich empfehle dir nicht mit Namen wie sql1 udn result1 zu arbeiten sondern mit aussagekräftigen Namen. Auch wenn sie etwas länger werden.
sqlDownloads & sqlDownloadSummary

item: Das erste Select gibt dir aber mehr als nur eine Zeile aus. Die musst du durch eine Schleife jagen.

item: Du wertes $test nirgens aus. Also brauchst du es auch nicht.

item: Du solltes das ganez unbedingt in eine Klasse setzen und die SQL in den Konstrukteur setzen.
SO wie es jetzt ist fürst du für jede Parameterabfrage 2 SQL-Abfragen aus. Wenn du für eine Datein 3 Sachen wissen willst hast du bereits 6 SQL-Abfragen was sehr unperfomrant ist
 
Die $test die sollte eigentlich nicht mit dabei stehen ^^ und zum Thema Klassen, nun da kenne ich mich nicht so wirklich mit aus. Vielleicht kennt ja hier jemand eine gute Anleitung.
Die 2 Abfragen sind so auch nur entstanden weil ich nicht wusste ob ich alles in Eine Packen konnte
 
Aber so richtig seh ich nichgt was du eigentlich genau alles haben willst.
Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Ich versuch es mal besser zu erklären.

| DId | DName | Filesize | Filename |
| 1 | Datei1 | 200 | Datei1.zip |
| 2 | Datei1 | 300 | Datei2.zip |

So nun habe ich es so eingerichtet, das in der Downloadliste nur 1 mal Datei1 steht, doch soll in der Download Info bei Datei Größe statt 200, 500 stehen, da DId 1 und DId 2 zusammen gehören.
 
Stimmt wie man bei meinem kleinen Code sehen kann habe ich auch versucht ihn um zusetzten nur verstehe ich nicht so ganz wie ich das jetzt ausgeben lassen soll
 
Und ich weiss immer noch nicht wie es am Ende aussehen soll. Das ist eigentlich entscheidend zu sagen wie du es ausgeben kannst.
 
Zurück