Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PSQL sinnvolle Abfragen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PSQL sinnvolle Abfragen?

    Grüße,
    ich nutze seit einiger Zeit dieses Script:
    Code:
    <?php
    if($dbconn){
    $starttime = pg_query ("SELECT MAX(starttime) FROM imko.mod_data");
    $starttime_fetch = pg_fetch_array($starttime);
    $windvelocity = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='5032' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $windvelocity_fetch = pg_fetch_array($windvelocity);
    $globalradiation = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='12922' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $globalradiation_fetch = pg_fetch_array($globalradiation);
    $winddirection = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='5524' AND channel='2' AND starttime='$starttime_fetch[0]'");
    $winddirection_fetch = pg_fetch_array($winddirection);
    $airpressure = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='12920' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $airpressure_fetch = pg_fetch_array($airpressure);
    $relhumidity = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='3874' AND channel='2' AND starttime='$starttime_fetch[0]'");
    $relhumidity_fetch = pg_fetch_array($relhumidity);
    $airtemperature = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='3874' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $airtemperature_fetch = pg_fetch_array($airtemperature);
    $cumulprecipitation = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='12921' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $cumulprecipitation_fetch = pg_fetch_array($cumulprecipitation);
    $precipitation = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='12921' AND channel='2' AND starttime='$starttime_fetch[0]'");
    $precipitation_fetch = pg_fetch_array($precipitation);
    $batteryampere = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='5780' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $batteryampere_fetch = pg_fetch_array($batteryampere);
    $batteryvolt = pg_query (" SELECT value,unit FROM imko.v_plot WHERE serno='5780' AND channel='2' AND starttime='$starttime_fetch[0]'");
    $batteryvolt_fetch = pg_fetch_array($batteryvolt);
    $volwatercontent = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='30272' AND channel='1' AND starttime='$starttime_fetch[0]'");
    $volwatercontent_fetch = pg_fetch_array($volwatercontent);
    $soiltemperature = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='30272' AND channel='2' AND starttime='$starttime_fetch[0]'");
    $soiltemperature_fetch = pg_fetch_array($soiltemperature);
    $tdrlevel = pg_query ("SELECT value,unit FROM imko.v_plot WHERE serno='30272' AND channel='3' AND starttime='$starttime_fetch[0]'");
    $tdrlevel_fetch = pg_fetch_array($tdrlevel);
    }else{}
    ?>
    Es wird mit 2 anderen .php Dateien includiert, der config (welche die Verbindung zur PostgreSQL Datenbank herstellt) und der Ausgabedatei (Welche die Variablen benutzt bzw. mit echo ausgibt).

    Ich denke mir schon die ganze Zeit, das es hierfür doch eine bessere Lösung anhand einer Schleife geben muss, welche mir automatisch Variablen mit den Werten zuteilt, oder liege ich da falsch?


  • #2
    Zitat von Soulstormer Beitrag anzeigen
    Ich denke mir schon die ganze Zeit, das es hierfür doch eine bessere Lösung anhand einer Schleife geben muss, welche mir automatisch Variablen mit den Werten zuteilt, oder liege ich da falsch?
    Bessere Lösungen gibts durchaus, sowohl mit Schleifen als auch mit Funktionen.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Hast du mir zufällig einen Link mit Beispiel?

      Kommentar


      • #4
        Am wichtigesten währe wohl, die Anzahl der Queries zu reduzieren.

        Code:
        SELECT value,unit, serno, channel FROM imko.v_plot WHERE serno IN (*liste-der-serno*) AND channel IN (1,2,3) AND starttime='$starttime_fetch[0]'
        Und dann das ganze per PHP Prüfen und entsprechend den Variablen zuweisen.
        Da sparrt man, je nach Datenbank mindestens 40ms pro Aufruf.

        Kommentar


        • #5
          Stichwort

          1) Prepared Statement - da du immer die gleiche Anfrage losschickst, nur mit leicht anderen Daten , würde sich ein prepared Statement anbieten

          2) wenn du sowieso mehrere Datensätze brauchst, warum baust du nicht EINE Abfrage, die dir zumindest ALLE Datensätze für eine "serno" zurückliefert, dann kannst du die Abfrage in eine Funktion auslagern.. Die würde Zeit und serno entgegennehmen und dann alle Channels auslesen und in einem mehrdimensionalen Array zurückliefern ....
          "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

          Kommentar

          Lädt...
          X