Tach!
Aus Tabelle A möchte ich nun alle Datensätze zählen die gelesen wurden und nicht gelesen wurden, bei Tabelle b das gleiche ohne 4 Abfragen machen zu müssen in dieser Art:
SELECT count(*) AS 2013Ungelesen FROM Nachrichten_2013 WHERE Adressat = ? AND Gelesen = 0
SELECT count(*) AS 2013Gelesen FROM Nachrichten_2013 WHERE Adressat = ? AND Gelesen = 1
Dein Problem ist, ein passendes SQL-Statement zu finden. PHP hat damit nichts zu tun, also lass das bitte aus der Problembeschreibung raus.
Die obigen beiden Abfragen lassen sich über 'GROUP BY Gelesen' zusammmenbringen. Weitere Tabellen lassen sich lediglich mit UNION anflanschen. Das bringt dir aber keinen großartigen Vorteil, weil es nur einen Roundtrip zum DBMS spart, die Querys aber trotzdem für jede Tabelle einzeln notiert werden müssen.
Gibt es eine Möglichkeit, dass ich diese 4 Abfragen in einer SQL Abfrage herausfinden kann, um nicht immer ein neues mysql_query aufzumachen?
Nur wenn du die gleichartigen Daten in nur einer Tabelle ablegst. Die Tabelle wird vielleicht sehr groß, aber nicht unendlich groß. Und ein DBMS ist auf die Verwaltung großer Datenmengen ausgelegt. Für ein schnelleres Finden helfen Indexe, die entsprechend der Abfragen angelegt werden.
Mit nur einer Tabelle könnte man hier über das Jahr und Gelesen gruppiert zählen lassen.
Zum Beispiel in der Art:
SELECT count(*) AS 2013Ungelesen FROM Nachrichten_2013 WHERE Adressat = ? AND Gelesen = 0, SELECT count(*) AS 2013Gelesen FROM Nachrichten_2013 WHERE Adressat = ? AND Gelesen = 1, SELECT count(*) AS 2012Gelesen FROM Nachrichten_2012 WHERE Adressat = ? AND Gelesen = 1,SELECT count(*) AS 2012Ungelesen FROM Nachrichten_2012 WHERE Adressat = ? AND Gelesen = 0
Es hilft dir nichts, mit Phantasie-Syntax ein Problem lösen zu wollen. Alles was syntaktisch geht, ist im MySQL-Handbuch beschrieben.
dedlfix.