SELECT COUNT(*) AS anzahl Problem...

Loddar1

Erfahrenes Mitglied
Hallo und einen schönen Sonntag,

Ich weis wie ich die anzahl der Einträge einer Tabelle zähle,
aber ich weis nicht wie ich gleiche und ungleiche zahlen auseinanderhalten kann:

Hier mal meine Einträge der DB:
Code:
id        zip          besch     cat    hits         text

1  -  test1.zip  -  Test 1  -  1   -   0   -    Ein Test 1.
2  -  test2.zip  -  Test 2  -  2   -   1   -    Ein Test 2.
3  -  test3.zip  -  Test 3  -  3   -   0   -    Ein Test 3.
4  -  test4.zip  -  Test 4  -  2   -   0   -    Ein Test 4.

und hier mal mein Code:
PHP:
$statement = $pdo->prepare("SELECT COUNT(cat) AS anzahl FROM $tabelles WHERE cat = '$_GET[cat]'");
      $statement->execute();
        $row = $statement->fetch();
  $hits = $row['anzahl'];

Zeigt einfach 0 an. zählen soll aber:
cat-1 = 1 hit
cat-2 = 2 hit
cat-3 = 1 hit

weis einer wo der Fehler liegt?
kriege das mit dem pdo nicht wirklich hin... Danke
 
Danke Yaslaw

Das habe ich schon hinbekommen.
vielleicht habe ich nicht das ganze Problem beschrieben.
Wenn ich diesen Code:
SQL:
$statement = $pdo->prepare("SELECT cat, COUNT(*) AS anzahle FROM $tabelle GROUP BY cat ORDER BY id");
$statement->execute(); 
     while($rw = $statement->fetch()) {
  $anzahle = $rw['anzahle'];
echo $anzahle.'<br/>';
}
einfüge bekomme ich als Ausgabe jetzt:
1
2
1
und das ist so auch Gut, aber nicht wie ich es will.

Ich öffne eine andere Tabelle mit:
SQL:
$statement = $pdo->prepare("SELECT * FROM $tabelle_cat ORDER BY id ASC");
$statement->execute();
while($row = $statement->fetch()) {
.........
}

damit werden mir momentan 3 Zeilen angezeigt.
Mit $anzahle möchte ich jetzt in Zeile 1 die 1
in Zeile 2 die 2 und in Zeile 3 die 1
angezeigt bekommen.
Wenn ich die variable dort eingebe, erhalte ich in allen 3 Zeilen die 1

Hast Du dafür eine Idee?
 
einfüge bekomme ich als Ausgabe jetzt:
1
2
1
und das ist so auch Gut, aber nicht wie ich es will.
Des entspricht doch genau dem hier
Mit $anzahle möchte ich jetzt in Zeile 1 die 1
in Zeile 2 die 2 und in Zeile 3 die 1
angezeigt bekommen.
Wenn ich die variable dort eingebe, erhalte ich in allen 3 Zeilen die 1

Also, was willst du nun wirklich?
 
Splitten damit ich sie in einer weiteren Tabelle anzeigen kann.

Hier mal der alte Code:
PHP:
$result = mysql_query("SELECT * FROM $tabelle_cat WHERE ORDER BY id ASC");
while ($l = mysql_fetch_array($result)) {

$linkz = mysql_result(mysql_query("SELECT COUNT(*) FROM $tabelle WHERE cat='$l[id]' AND block='0'"),0);

if($linkz==1);

echo $l['cat'].' - '.$l['besch'].' - '.$linkz.$linn;
}
Hat angezeigt: Kategorie Beschreibung und Menge
 
???

Wozu etwas splitten, das du bereits gesplittet bekommst?

Und ganz ehrlich gesagt, ich habe anhand deiner Angaben keinen Schimmer was du am Schluss haben willst. Vergiss mal das PHP. Konzentrier dich auf das SQL. Was soll das SQL in welcher Form ausgeben. Mit dem Resultat des SQL kannst du dich dann um die PHP-Geschichte kümmern.

Mach 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
 
Tabelle 1
Code:
id      kat           besch
1     Kat 1     Reine HTML Seiten
2     Kat 2     PHP gesteuert
3     Kat 3     PHP gesteuert mit DB


Tabelle 2
Code:
id       Datei       Titel  cat    Besch
1     test1.zip     Test-1     1     Ein Test-1
2     test2.zip     Test-2     2     Ein Test-2
3     test3.zip     Test-3     3     Ein Test-3
4     test4.zip     Test-4     2     Ein Test-4

Sieht ca. so aus mit altem Code: Statt Scripts = cat
pic.jpg
 
Zuletzt bearbeitet:
Ich gebs auf. Ich finde keine deiner Daten der ersten 2 Tabellen in der letzten Grafik.
Ich habe keine Lust auf Zuordnunsratespiele. Ev. kann dir jemand anderes weiterhelfen.

Ich bin dann mal weg.
 
Du suchst wahrscheinlich so was:

Code:
SELECT
        a.kat    AS Kategorien,
        a.besch  AS Beschreibung,
        b.anzahl AS Scripts
FROM
        Tabelle1 AS a
INNER JOIN
    (
        SELECT
                cat,
                COUNT(*) AS anzahl
        FROM
                Tabelle2
        GROUP BY
                cat
    ) AS b
    ON
        a.id = b.cat
ORDER BY
        kat ASC

Rückgabe:

Code:
+------------+----------------------+---------+
| Kategorien | Beschreibung         | Scripts |
+------------+----------------------+---------+
| Kat 1      | Reine HTML Seiten    |       1 |
| Kat 2      | PHP gesteuert        |       2 |
| Kat 3      | PHP gesteuert mit DB |       1 |
+------------+----------------------+---------+
3 rows in set (0.00 sec)

Rohdaten:

Code:
--
-- Table structure for table `Tabelle1`
--

CREATE TABLE IF NOT EXISTS `Tabelle1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kat` varchar(255) NOT NULL,
  `besch` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `Tabelle1`
--

INSERT INTO `Tabelle1` (`id`, `kat`, `besch`) VALUES
(1, 'Kat 1', 'Reine HTML Seiten'),
(2, 'Kat 2', 'PHP gesteuert'),
(3, 'Kat 3', 'PHP gesteuert mit DB');

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

--
-- Table structure for table `Tabelle2`
--

CREATE TABLE IF NOT EXISTS `Tabelle2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Datei` varchar(255) NOT NULL,
  `Titel` varchar(255) NOT NULL,
  `cat` int(11) NOT NULL,
  `Besch` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `Tabelle2`
--

INSERT INTO `Tabelle2` (`id`, `Datei`, `Titel`, `cat`, `Besch`) VALUES
(1, 'test1.zip', 'Test-1', 1, 'Ein Test-1'),
(2, 'test2.zip', 'Test-2', 2, 'Ein Test-2'),
(3, 'test3.zip', 'Test-3', 3, 'Ein Test-3'),
(4, 'test4.zip', 'Test-4', 2, 'Ein Test-4');

Man hätte wohl auch einfach sagen können:

„Ich habe zwei Tabellen. Die eine Tabelle enthält Einträge für Kategorien. Die andere Tabelle enthält Einträge für Dateien, die jeweils einer Kategorie zugeordnet sind (Fremdschlüssel). Ich versuche nun, eine Liste aller Kategorien zu erhalten, die pro Eintrag auch die Information enthält, wie viele Dateien zur entsprechenden Kategorie gehören.“

Zudem würde ich *dringend* empfehlen, deine Felder sinnvoller und einheitlicher zu benennen. Vorschlag:

Tabelle 1 (category): id, title, description
Tabelle 2 (file?): id, filename, category_id, title, description

(Mit „file“ als Tabellenname bin ich allerdings selbst nicht wirklich glücklich. Vielleicht besser was wie „upload“? Wobei „upload“ ziemlich spezifisch ist und der Mechanismus, wie die Daten erzeugt werden, ja eigentlich egal ist. Na ja, auch nicht so wichtig.)
 
Hallo mermshaus,
das ist genau das was ich gesucht habe!
Habe zwar ein bisschen gebraucht um zu verstehen aber jetzt funktioniert es!
Ich Danke dir recht herzlich, dass Du mein Kauderwelch verstanden hast.
Das PDO ist verdammt kompliziert für mich, wird wohl noch eine Weile dauern bis ich es geschluckt habe.
 
Zurück