Datenbankabfrage einfacher?

hawaiian

Mitglied
Hallo zusammen,

ich habe eine Datenbankabfrage erstellt, die wie folgt ausschaut:

Code:
# Abfrage Boxen insgesamt
if (!empty ($_POST['sportart']) && $_POST['sportart'] == 'Boxen') {
   $boxabfrage1 = "SELECT sportart, medaille, COUNT(*) AS anzahl FROM xxx WHERE sportart LIKE 'Boxen' AND medaille LIKE 'Gold'";
   $boxergebnis1 = mysql_query($boxabfrage1);
   while ($zeile1 = mysql_fetch_assoc($boxergebnis1))

if (!empty ($_POST['sportart']) && $_POST['sportart'] == 'Boxen') {
   $boxabfrage2 = "SELECT sportart, medaille, COUNT(*) AS anzahl FROM xxx WHERE sportart LIKE 'Boxen' AND medaille LIKE 'Silber'";
   $boxergebnis2 = mysql_query($boxabfrage2);
   while ($zeile2 = mysql_fetch_assoc($boxergebnis2))

if (!empty ($_POST['sportart']) && $_POST['sportart'] == 'Boxen') {
   $boxabfrage3 = "SELECT sportart, medaille, COUNT(*) AS anzahl FROM xxx WHERE sportart LIKE 'Boxen' AND medaille LIKE 'Bronze'";
   $boxergebnis3 = mysql_query($boxabfrage3);
   while ($zeile3 = mysql_fetch_assoc($boxergebnis3))

if (!empty ($_POST['sportart']) && $_POST['sportart'] == 'Boxen') {
   $endergebnis1_boxen = array($zeile1['anzahl'],$zeile2['anzahl'],$zeile3['anzahl']);
   $summe1_boxen = array_sum($endergebnis1_boxen);

# Abfrage Boxen GER ...
if (!empty ($_POST['sportart']) && $_POST['sportart'] == 'Boxen') {
   $boxabfrage4 = "SELECT sportart, medaille, COUNT(*) AS anzahl FROM xxx WHERE sportart LIKE 'Boxen' AND medaille LIKE 'Gold' AND mannschaft <> 'GDR'";
   $boxergebnis4 = mysql_query($boxabfrage4);
   while ($zeile4 = mysql_fetch_assoc($boxergebnis4))

usw.

Die Datenbankabfrage funktioniert tadellos, das Ergebnis wird dann in einer Tabelle wiedergegeben (siehe Anhang). Nun stelle ich mir die Frage, ob ich die Abfrage nicht etwas einfacher, komprimierter gestalten könnte, z. B. dergestalt, die "boxabfragen1 bis 3" irgendwie zusammenzufassen. Ja, und diese Frage möchte ich gerne ins Forum weitergeben ...

Viele Grüße
hawaiian
 

Anhänge

  • medaillenbilanz.PNG
    medaillenbilanz.PNG
    9,7 KB · Aufrufe: 8
HJepp, Erstell en sauberes SQL. Zu einem COUNT() gehört auch ein GROUP BY.

SQL:
SELECT
  sportart,
  medaille,
  COUNT(*) AS anzahl
FROM xxx
WHERE
  sportart LIKE 'Boxen'
  AND medaille IN('Gold', 'Silber', 'Bronze')
 
Ich würde bei dieser Gelegenheit auf PDO umstellen und hier mit prepared Statements arbeiten.
Somit brauchst Du die Abfrage immer nur mit den passenden Variablen ausführen lassen.
PHP:
<?PHP
if ($_POST['sportart'] == 'Boxen') {
 // vorbereitete Abfrage
 $sth = $pdo->prepare('SELECT sportart, medaille, COUNT(*) AS anzahl FROM xxx WHERE sportart LIKE :sportart AND medaille LIKE :medaillie');

 // Abfrage mit entsprechenden Parametern ausführen
 $sth->bindParam(':sportart', 'boxen');
 $sth->bindParam(':medaillie', 'gold');
 $sth->execute();
 while ($ausgabe1  = $sth->fetch()) {
 }

 // Abfrage mit entsprechenden Parametern ausführen
 $sth->bindParam(':sportart', 'boxen');
 $sth->bindParam(':medaillie', 'silber');
 $sth->execute();
 while ($ausgabe2  = $sth->fetch()) {
 }
}
?>
 
Hallo zusammen,

Yaslaw, deinen Tipp sowie den Code habe ich inzwischen erfolgreich ausprobieren können. Jetzt muss ich die Ergebnisse nur noch in Tabellen unterbringen. Herzlichen Dank.
Was aber heißt oder bedeutet HJepp?

Registrierer, vielen Dank auch für deinen Vorschlag. Meine Kenntnisse in PHP/MySQL sind sehr bescheidener Natur. Mit PDO muss ich mich erst noch beschäftigen. Ein wenig habe ich schon nachgelesen. Ein kurzer Test deines Codes wirft pdo noch als undefinierte Variable aus, ferner den Fehler: Fatal error: Call to a member function prepare() on a non-object. Aber, wie gesagt, ich stehe da noch nicht einmal am Anfang, werde bei zeitlicher Gelegenheit deinen Vorschlag aber wieder aufgreifen.

Viele Grüße
hawaiian
 
HJepp bedeutet ein Schreibfehler, der eigentlich Jepp heissen sollte und bedeutet: Ja, man kann es einfacher gestalten
 

Neue Beiträge

Zurück