(MySQL) Anzahl der Einträge mehrerer Tabellen feststellen
Tina
- datenbank
Hallo liebes Forum,
Ich habe folgendes Problem:
In einer mysql Datenbank habe ich mehrere Tabellen, nennen wir sie mal tabelle1, tabelle2, [...].
Ich möchte jetzt herausfinden, wie viele Datensätze jeweils zB. in tabelle2 und tabelle3 enthalten sind.
Hierzu fallen mir mehrere Möglichkeiten ein.
Ich mach zwei Abfragen (in meinem Fall über php mysql_query()) über SELECT, also:
SELECT * FROM tabelle2
SELECT * FROM tabelle3
Und werte das Ergebnis dann mit mysql_num_rows() aus.
Im Forum fand ich noch die Möglichkeit von
SELECT COUNT(*) FROM tabelle2
SELECT COUNT(*) FROM tabelle3
was mir dann das Zählen schon vorweg nimmt.
Bei der Möglichkeit hab ich aber auch wieder so viele Datenbankabrfagen, wie ich Tabellen untersuchen möchte, was bei vielen Tabellen vermutlich zu Problemen führt.
Zudem finde ich es nicht sehr effektiv, wenn man nur um zu Zählen die ganzen Daten abfragen muss. (Gut, man könnte das * durch ein spezielles Feld ersetzen, aber das macht es im Endeffekt auch nicht besser.)
Abgesehen davon würde ich das gerne in nur einer Datenbankabfrage erledigen.
Dazu fällt mir SHOW TABLE STATUS [LIKE '...'] ein.
Das liefert einem ja ein Ergebnis, in dem zu jeder Tabelle auch die Anzahl der Datensätze steht.
Ausgehend davon bieten sich nun zwei Möglichkeiten um mein Ziel über nur eine DB Anfrage zu erreichen.
Ich könnte mit php aus dem Ergebnis die Datensätze filtern, die ich gerne hätte (was ich aber für recht aufwändig halte), oder ich verwende LIKE.
Um jetzt die Eigenschaft von LIKE mit % zu meinem Vorteil zu nutzen müsste ich die Tabellen ja nach einem gleichen Muster benennen, also zB. zuSuchenA, zuSuchenB, etc. worauf ich dann mit 'zuSuchen%' zugreifen könnte.
Dummerweise muss ich mich dann schon vorher (also beim Erstellen der Tabellen) entschieden haben, welche ich mal später in einer Abfrage zählen möchte. Aber eigentlich soll das dynamisch gehen.
Ich währe sehr froh, wenn mir jemand sagen könnte, welche Methode davon die geeignetste ist, oder mir vll. sogar einen anderen Lösungsweg bieten kann. :)
Freundliche Grüße,
Tina
echo $begrüßung;
Ich möchte jetzt herausfinden, wie viele Datensätze jeweils zB. in tabelle2 und tabelle3 enthalten sind.
SELECT * FROMtabelle2
SELECT * FROMtabelle3
Und werte das Ergebnis dann mit mysql_num_rows() aus.
Das ist eine sehr schlechte Idee, denn die Anzahl der Datensätze kennt PHP erst, wenn es alle Datensätze abgeholt hat.
Im Forum fand ich noch die Möglichkeit von
SELECT COUNT(*) FROMtabelle2
SELECT COUNT(*) FROMtabelle3
was mir dann das Zählen schon vorweg nimmt.
Das ist der Weg des geringsten Aufwands für eine Tabelle. Das DBMS zählt schneller und muss dann nur eine Zahl an den Client übermitteln. Außerdem muss MySQL in dem speziellen Fall nicht alles zu Fuß zählen, denn die Gesamtzahl der Datensätze verwaltet es extra und hat damit einen sehr schnellen Zugriff auf das Ergebnis.
Bei der Möglichkeit hab ich aber auch wieder so viele Datenbankabrfagen, wie ich Tabellen untersuchen möchte, was bei vielen Tabellen vermutlich zu Problemen führt.
Nicht wirklich. Es sei denn, du schränkst das Suchergebnis ein und das DBMS kann keinen Index verwenden.
Dazu fällt mir SHOW TABLE STATUS [LIKE '...'] ein.
Das liefert einem ja ein Ergebnis, in dem zu jeder Tabelle auch die Anzahl der Datensätze steht.
Ja, und ein Datensatz pro Tabelle ist doch vertretbar. Du wirst doch wohl hoffentlich keine Tausende von Tabellen anlegen?
echo "$verabschiedung $name";
Ich möchte jetzt herausfinden, wie viele Datensätze jeweils zB. in tabelle2 und tabelle3 enthalten sind.
SELECT * FROMtabelle2
SELECT * FROMtabelle3
Und werte das Ergebnis dann mit mysql_num_rows() aus.Das ist eine sehr schlechte Idee, denn die Anzahl der Datensätze kennt PHP erst, wenn es alle Datensätze abgeholt hat.
Jop, hab ich mir gedacht.
Im Forum fand ich noch die Möglichkeit von
SELECT COUNT(*) FROMtabelle2
SELECT COUNT(*) FROMtabelle3
was mir dann das Zählen schon vorweg nimmt.Das ist der Weg des geringsten Aufwands für eine Tabelle. Das DBMS zählt schneller und muss dann nur eine Zahl an den Client übermitteln. Außerdem muss MySQL in dem speziellen Fall nicht alles zu Fuß zählen, denn die Gesamtzahl der Datensätze verwaltet es extra und hat damit einen sehr schnellen Zugriff auf das Ergebnis.
Bei der Möglichkeit hab ich aber auch wieder so viele Datenbankabrfagen, wie ich Tabellen untersuchen möchte, was bei vielen Tabellen vermutlich zu Problemen führt.
Nicht wirklich. Es sei denn, du schränkst das Suchergebnis ein und das DBMS kann keinen Index verwenden.
Gut zu wissen, dass das der geringste Aufwand für die DB ist, das war nämlich so meine Sorge.
Ich denke mal, dass wird dann die Methode meiner Wahl sein. :)
Dazu fällt mir SHOW TABLE STATUS [LIKE '...'] ein.
Das liefert einem ja ein Ergebnis, in dem zu jeder Tabelle auch die Anzahl der Datensätze steht.Ja, und ein Datensatz pro Tabelle ist doch vertretbar. Du wirst doch wohl hoffentlich keine Tausende von Tabellen anlegen?
Naja ich hab keine tausende Tabellen, es ging mir eigentlich auch eher um die Theorie.
In der Praxis funktionieren ja alle vorgeschlagenen Methoden, aber ich wollte halt wissen, welche die effizenteste ist und am wenigsten Zeit braucht.
Und ob es vll. eine Methode mit nur einer Anfrage gibt, aber ok, deine Argumente für das mit COUNT haben mich überzeugt, dass das mit mehreren ok ist. :)
Jedenfalls mal Danke für die schnelle und gute Hilfe.
yo,
ich kenne mich leider mit mysql immer noch nicht so gut aus, in oracle wüsste ich, welche tabellen ich ansprechen muss, um alles (dynamisch) leicht mit einer abfrage zu erhalten.
in mysql kann man das zur not auch mit UNION ALL machen, sprich du musst dann nur noch eine abfrage abschicken, die dir alle informationen gibt. elegant finde ich die lösung nicht, weil du die abfrage jedesmal anfassen musst, wenn neue tabellen dazu kommen. aber es wäre eine abfrage für alle tabellen.
Ilja