Datenbankanfrage richtig oder nicht?

am 27.01.2011 - 13:07 Uhr in
hallo,
ich habe mir ein Modul gebastelt das mir mehrere Werte aus der Datenbank holt und in einem Block wiedergibt.
Es hat nur mit einer SQL-Anfrage angefangen (Durchschnittswert einer Spalte AVG) aber nach und nach wollte ich auch andere Werte abfragen. (MIN, MAX)
Das Ergebnis ist ein unschöner Code mit einiger SQL-Anfragen hintereinander.
$avg_wert_a= db_result(db_query("SELECT AVG(field_A FROM tabelle_A WHERE field_b=A));
$avg_min_a= db_result(db_query("SELECT MIN(field_A FROM tabelle_A WHERE field_b=A));
$avg_max_a= db_result(db_query("SELECT MAX(field_A FROM tabelle_A WHERE field_b=A));
weiterhin wollte ich Ergebnisse nach einem anderen Parameter B sehen, und dann kamen wieder neue SQL-Sentences dazu
$avg_wert_a= db_result(db_query("SELECT AVG(field_A FROM tabelle_A WHERE field_b=A));
$avg_min_a= db_result(db_query("SELECT MIN(field_A FROM tabelle_A WHERE field_b=A));
$avg_max_a= db_result(db_query("SELECT MAX(field_A FROM tabelle_A WHERE field_b=A));
$avg_wert_b= db_result(db_query("SELECT AVG(field_A FROM tabelle_A WHERE field_b=B));
$avg_min_b= db_result(db_query("SELECT MIN(field_A FROM tabelle_A WHERE field_b=B));
$avg_max_b= db_result(db_query("SELECT MAX(field_A FROM tabelle_A WHERE field_b=B));
Könnte man es anders lösen? (um Verbindungen zur SQL-Datenbank zu sparen)
Ich weiß, das ist kein MySQL-Forum, aber vielleicht könnte mir trotzdem jemand helfen.
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
SQL
am 27.01.2011 - 13:42 Uhr
Hallo.
$avg_wert_a= db_result(db_query("SELECT AVG(field_A FROM tabelle_A WHERE field_b=A));
Das dürfte aufgrund der Klammersetzung so schonmal nicht funktionieren. Du möchtest ja den Durchschnitt von "field_A" und nicht von "field_A FROM tabelle_A ...".
Korrekt ist:
<?php
$avg_wert_a = db_result(db_query("SELECT AVG(field_A) as avg_value FROM {tabelle_A} WHERE field_b = '%s'", 'A'));
?>
Könnte man es anders lösen? (um Verbindungen zur SQL-Datenbank zu sparen)
Ungetestet:
<?php
$query_a = db_query("SELECT AVG(field_A) as avg_value, MIN(field_A) as min_value, MAX(field_A) as max_value FROM {tabelle_A} WHERE field_b = '%s'", 'A');
list($avg_wert_a, $min_wert_a, $max_wert_a) = db_fetch_array($query_a);
$query_b = db_query("SELECT AVG(field_A) as avg_value, MIN(field_A) as min_value, MAX(field_A) as max_value FROM {tabelle_A} WHERE field_b = '%s'", 'B');
list($avg_wert_b, $min_wert_b, $max_wert_b) = db_fetch_array($query_b);
?>
hth,
Stefan
ja, das mit Klammern , war
am 27.01.2011 - 13:46 Uhr
ja, das mit Klammern , war nur eine Anpassung (Vereinfachung) von mir, nur für das Forum. Echte Anfrage ist viel länger, da JOIN und andere Sachen noch drin.
So, danke Dir für deine Antwort, ich denke, ich könnte es gut gebrauchen.
GRuss