Steh auf dem Schlauch: Mysql Abfrage bzw. Auswertung

MC-René

Erfahrenes Mitglied
Hallo!

Ich habe 2 Tabellen:

Eine heißt "entries" und ist so aufgebaut:
Code:
ID (INT)
USER (TINYTEXT)
DATUM (INT)
TEXT (LONGTEXT)
ART (INT)

Und die andere heist "art":
Code:
ID (INT)
NAME (LONGTEXT)
AKTIV (INT)

Jetzt möchte habe ich eine Abfrage (Abfrage 1) zu der 1. Tabelle erstellt:
PHP:
$heute=strtotime(now);
$abfrage="SELECT * FROM entries WHERE DATUM>'$heute' Order BY Datum";
//Ausgabe in einer Tabelle...

Dadurch bekomme ich eine schöne Tabelle!

Nun möchte ich die jeweilige Anzahl der 'Art' rausfinden um diese mittels 'pChart' ausgeben zu lassen:
PHP:
// Dataset definition 
 $DataSet = new pData;
 $DataSet->AddPoint(array($art_1,$art_2,usw.),"Serie1");
 $DataSet->AddPoint(array($art_bez1,$art_bez2,usw.),"Serie2");
 $DataSet->AddAllSeries();
 $DataSet->SetAbsciseLabelSerie("Serie2");

Ich weis 1. nicht wie ich die Abfrage gestalten muss! Nach dem Motto:
Überprüfe jede Zeile aus Tabelle 'art' ob und wieoft diese Art in Abfrage 1 vorkommt.

Und 2. muss ich für die Grafik die Array's füllen. Ich denke dass kann ich mittels $art_[] und $art_bez[] machen. Nur wie lautet dann die Syntax für das pChart-Script:
Etwa so:
PHP:
// Dataset definition 
 $DataSet = new pData;
 $DataSet->AddPoint($art_[],"Serie1");
 $DataSet->AddPoint($art_bez[]),"Serie2");
 $DataSet->AddAllSeries();
 $DataSet->SetAbsciseLabelSerie("Serie2");

Danke schonmal für Eure Tipps und Hilfe!
 
1) GROUP BY und COUNT()
SQL:
SELECT 
    art.id,
    COUNT(entries.art) AS anz
FROM 
    art
    LEFT JOIN entries
        ON ert.id = entries.art
GROUP BY 
    art.id;

2) Ich kenne pChart nicht
 
Zuletzt bearbeitet von einem Moderator:
Danke schonmal...

Ich habe nun Deinen MySQL-Code mittels meiner MySQL-Befehslreferenz zerpflückt (weil ich es ja auch verstehen will)...

Bei einigen "Sachen" bin ich mir aber im Unklaren; z.B. :
- Warum wird: AS anz benutzt: Lt. meinem (neuen) Kenntnisstand wird dadurch dem Select ausdruck ein Alias (hier: anz) zugewiesen --> warum?
- Bei ON ert.id handelt es sich vermtl. um einen Schreibfehler? --> ON art.id

Ich probier parallel das ganze nachher auch mal aus... :p
 
1) Ja, ein Alias damit du nachher sauber auf das Feld zugreiffen kannst. 'COUNT(*)' ist
a) kein aussagekräftieger name
b) total Schei**e wenn du nachher darauf zugreiffen willst

2) jepp, art.id
 
OK, soweit verstanden (hoffe ich) :-)

An welcher stelle müsste meine WHERE eingrenzung in der Abfrage sein!?

Etwa so:

SQL:
SELECT 
    art.id,
    COUNT(entries.art) AS anz
FROM 
    art
    LEFT JOIN entries
        ON art.id = entries.art
WHERE Datum>'$heute'
GROUP BY 
    art.id;
 
Zuletzt bearbeitet von einem Moderator:
Nicht ganz. Das Problem ist, dass du an dieser Stelle bei Artikel die keine Entries haben auf NULL prüfst. Ob das gut ghet, kann ich grad nicht sagen

Ich würde demzufolge für die Entries eine Unterabfrage erstellen und dann diese mit den Artikeln kombinieren. Somit hast du alle Artikel, auch diejnigen die keine Entries in der Zukunft haben.
SQL:
SELECT 
    art.id,
    COUNT(ent.art) AS anz
FROM 
    art
    LEFT JOIN (
                SELECT *
                FROM entries
                WHERE Datum>'$heute'
              ) AS ent
        ON art.id = ent.art
GROUP BY 
    art.id;
 
Zurück