Frage zu count DB von mehreren Spalten - PDO


klausi89

Erfahrenes Mitglied
#1
Hallo ich möchte die user einer Spalte in meiner DB zählen und ausgeben,
dazu hab ich mir folgendes mal angelegt

PHP:
$pdo = new PDO('mysql:host=localhost;dbname=datenbankname', 'db_user', 'passwort');

$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM `users_maenner`");
$statement->execute();
$user = $statement->fetch();
echo $user['anzahl'];
das funktioniert soweit auch, so nun meine Frage ich möchte gerne die User der Spalte `users_frauen` (in der selben DB) dazu zählen
Brauche ich da jetzt eine neue Abfrage und zähle dann die Variablen einfach zusammen oder kann ich das gleich in meiner Abfrage mit einbauen.
Ich hab probiert es mit komma getrennt mit einzufügen, dann wird aber nur die 2. (Spalte - `users_frauen`) gezählt.
Da das für mich noch ziemliches Neuland ist wäre es nett wenn mir jemand dazu was sagen könnte.

Wie gesagt ich könnte ja auch eine neue Verbindung zur Spalte `users_frauen` aufbauen und dann z.bsp. die Variable $user (für die männer) und beispielsweise $user_frauen
zusammen zählen, aber ich möchte gerne wissen ob das schon bei der Datenbankabfrage funktioniert.
 

Yaslaw

n/a
Moderator
#2
ALs Erstes. Solche Daten soll man nicht in verschiedene Tabellen speichern. Hat nix mit Genderzeugs zu tun sondern mit sauberem DB-Aufbau.
Eine Tabelle mit den Userdaten und einem Feld GENDER.

Nungut, du hast den komplizierten und unpraktischen sowie langsamen Weg gewählt. Dann solltest du dich schleunigst mit dem Befehl UNION auseinandersetzen. Beim UNION kannst du aber nicht mehr mit dem * arbeiten, sondern musst die Felder beim Namen nennen.
Ich gehe mal davon aus, dass beide Tabellen ein Feld namens ID besitzen und diese eindeutig sind
SQL:
select count(t.*) as anzahl 
from 
    (
        select id, 'mann' as gender
        from users_maenner
        union all select id, 'frau' as gender
        from users_frauen
    ) as t
Aber nochmals. Lege die 2 Tabellen zusammen. Das hier ist nur der ANfang von dem Chaos in das du unweigerlich kommst, wenn due Daten die zusammengehören in verschiedene Tabellen schreibst.
 

klausi89

Erfahrenes Mitglied
#3
Danke schonmal ich hab das kurzer hand nochmal abgeändert und alles in eine Datenbank gemacht, danke für den Tipp....

hätte da aber noch eine Frage und zwar möchte ich aus einer Tabelle was zusammen zählen für die Statistik
nun habe ich aber das Problem das in der Spalte 2 Sachen abgespeichert werden.

Und zwar ich habe die Tabelle->Spalte (type) ->Einträge - normal und referer, nun möchte ich aber nur die einträge normal zählen kann man das leicht mit meinem oberen Beispiel verwirklichen?

PHP:
$pdo = new PDO('mysql:host=localhost;dbname=datenbankname', 'db_user', 'passwort');

$statement = $pdo->prepare("SELECT COUNT(type) AS anzahl FROM `tabelle`");
$statement->execute();
$views = $statement->fetch();
echo $views['anzahl'];
da müsste ja nun noch irgendwie ne selektierung rein....also zähle nur type -> normal (und nicht referer)
 

ComFreek

Mod | @comfreek
Moderator
#5
Dafür gibt es doch das WHERE-Statement mit Gleichheitssymbol auf Strings:
SQL:
SELECT COUNT(type) AS anzahl FROM tabelle WHERE type='normal'
LIKE sollte auch funktionieren, mitunter zum selben Ausführungsplan wie WHERE führen, wenn du keine Wildcards (Prozentzeichen: %) genutzt hast. Trotzdem finde ich aber, dass ='normal' semantisch besseren Code abgibt.