Zählen von Usereinträgen aus verschiedenen Tabellen mit PDO

klausi89

Erfahrenes Mitglied
Hallo ich wollte mal wissen ob man meinen Code auch vereinfachen kann?

Ich zähle die User aus einer Datenbank aber aus verschiedenen Tabellen zusammen.

Das geschieht bisher folgender maßen:

PHP:
$pdo = new PDO('mysql:host=localhost;dbname=datenbank', 'dbuser', 'dbpass');

$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM `users_de`");
$statement->execute();
$btcuser = $statement->fetch();


$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM `users_en`");
$statement->execute();
$btcuser = $statement->fetch();


$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM `users_ru`");
$statement->execute();
$btcuser = $statement->fetch();

$user = $deuser['anzahl'] + $enuser['anzahl'] + $ruuser['anzahl'];

echo $user;

Das funktioniert soweit ganz gut. Ich möchte aber gerne wissen ob ich die count abfrage irgendwie zusammenfassen kann.

das es noch spanisch, italienisch und französisch gibt, und der Code dann doch etwas lang ist.

PHP:
$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM `users_de`, `users_en`, usw.");

hab ich mal ausprobiert, funktioniert aber nicht.

Vielleicht hat jemand eine Idee dazu.

Gruß
 
Wie steht's denn mit
"SELECT COUNT(*)
FROM `users_de`
NATURAL JOIN `users_en`
NATURAL JOIN `users_ru`
NATURAL JOIN `users_it`
NATURAL JOIN `users_fr`
NATURAL JOIN `users_es`
AS anzahl";
 
@StormChaser Ich frage mich, auf was der NATURAL JOIN arbeiten soll. So wie ich das rauslese, bestehen hier keine Fremdschlüsselbeziehungen hier.

@klausi89 Ich würde eher am Datenbanklayout schrauben. Warum hast du überhaupt so viele Tabellen? Warum ist Sprache keine Spalte einer einzigen users Tabelle?
 
@ComFreek: Wie kommst Du auf Fremdschlüssel bei NATURAL JOIN ?

Dass das Layout so wenig hilfeich ist, ist klar, und dass die Spalten zur Sprache in eine UsersTabelle gehören, versteht sich eigentlich von selbst. Aber das war nicht die Frage. Oder geht es auch hier inzwischen um User-Erziehung ?
 
Wie kommst Du auf Fremdschlüssel bei NATURAL JOIN ?
Sucht sich der NATURAL JOIN nicht ein gleichnamiges Spaltenpaar aus den beiden Operandentabellen aus und joined auf Gleichheit der Werte in dieser Spalten damit? Im den Sinne ist ein NATURAL JOIN nichts anderes als ein `FROM tblA JOIN tblB ON tblA.a = tblB.b`, nur dass du das das DBMS inferrieren lässt.

Dass das Layout so wenig hilfeich ist [...] versteht sich eigentlich von selbst. Oder geht es auch hier inzwischen um User-Erziehung ?
Du glaubst gar nicht, wie viele Dinge sich eigentlich von selbst verstehen als Fortgeschrittener, anderen Leuten aber nicht bewusst ist :) Und selbst als Fortgeschrittener gibt es immer was zu lernen. Deswegen merke ich es zumindest immer an.
 
Wie bereits beschrieben, sollte das eine Tabelle sein mit einer Sprachspalte.

Nun gut, ein Klassiker um dein Problem mit der bestehenden Struktur zu lösen ist ein UNION ALL
SQL:
select count(*)
from (
    select id from users_de
    union all select id from users_en
    union all select id from users_fr
    -- etc.
  )
 

Neue Beiträge

Zurück