Ankündigung

Einklappen
Keine Ankündigung bisher.

SELECT mit unterschiedlich! benötigten Abfragebedinungen auslagern

Einklappen

Neue Werbung 2019

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

  • SELECT mit unterschiedlich! benötigten Abfragebedinungen auslagern

    Geht das überhaupt?

    Ich möchte eine SELECT-Abfrage auslagern und auf verschiedenen Seiten einbinden. Auf den verschiedenen Seiten müsste und will ich unterschiedliche Abfragebedingungen in der WHERE-Klausel definieren. Nach dem, was ich mir zu diesem Thema angelesen habe, dachte ich eigentlich, dass es über einen Funktionsaufruf möglich sein und kein Problem sein würde, scheint es für mich aber doch zu sein, denn ich scheitere daran, die WHERE Bedinungen an die ausgelagerte Abfrage "anzubinden".


    Kann mir jemand zuallerst einmal meine Fragen oder Aussagen zum besseren Verständnis beantworten oder korrigieren?
    1. Werden SELECT (oder auch UPDTATE) auf mehreren Seiten benötigt, dann werden diese (generell, immer, grundsätzlich, ohne Ausnahme) als Funktionsaufruf? ausgelagert oder könnte/muss man ein mehrfach benötigtes SELECT in eine Datei schreiben und diese Datei immer wieder über include da wo benötigt einbinden (analog zur Einbindung des Navigationsmenüs auf allen Seiten einer Webseite)
    2. Kann man auch "Einzelteile" einer komplexen Abfrage auslagern und diese Einzelteile auf unterschiedlichen Seiten in einer Abfrage bunt gemixt wieder zusammenfügen? Für mich ist eine komplexe Abfrage, wenn eine Abfrage mehrere JOINS oder auch Unterabfragen einschließt) und wie "schweißt" man solche zusammengemixten Abfragen wieder zusammen?

    Zurück zu meinem konkreten Problem:
    So sieht meine Abfrage aus, die ich gern auslagern möchte:
    PHP-Code:
    function veranstaltungenSelect()
    {
    SELECT
                    v
    .idv.titelDATE_FORMAT(v.start_datum,"%d.%m.%Y") AS start,
                    
    vv.titel AS titel_vorlage,
                    
    o.name AS o_nameo.ort as ortorte_id,
                    (
    SELECT COUNT(vt.teilnehmer_idFROM veran_teiln vt WHERE vtabsage AND vt.veranstaltungen_id v.id) AS anzTN
                FROM  
    `veranstaltungenv
                LEFT JOIN ort o ON orte_id 
    o.id
                LEFT JOIN ziel z ON v
    .id z.veranstaltungen_id
                LEFT JOIN vorlagen vv ON vv
    .id v.ausvvorlagen_id

    Je nachdem, welcher Weg der Einbindung der Richtige ist, bei Funktionsaufruf, weiß ich nicht mehr weiter, weil der übliche Funktionsaufruf
    PHP-Code:
    echo function veranstaltungenSelect 
    nicht funktionieren kann, wenn ich nirgendwo ein query platziert habe?

    Dateieinbindung habe ich auch schon versucht, doch wo bzw. wie würde ich hier meine Where-Bedingung andocken?
    PHP-Code:
    include ("include/s_veranstaltung_inc.php"); 
    Vorab schon einmal recht vielen Dank für Eure Hilfe Gruß Marie

  • #2
    Zuerst mal, dein PHP-Code wird mit einem Parser Error aussteigen.

    1) wenn man so etwas auslagern möchte, dann jedenfalls nicht in Textdateien.

    2) Schau dir mal Query Builder an (DBAL, Aura.SQL, ...), dann sollten sich einige deiner Fragen erübrigen.

    Kommentar


    • #3
      und falls dir die zu schwer erscheinen...

      Funktionen dürfen durchaus Parameter haben ...

      PHP-Code:
      function veranstaltungenSelect($where="")
      {
      $querystring="SELECT
                      v.id, v.titel, DATE_FORMAT(v.start_datum,'%d.%m.%Y') AS start,
                      vv.titel AS titel_vorlage,
                      o.name AS o_name, o.ort as ort, orte_id,
                      (SELECT COUNT(vt.teilnehmer_id) FROM veran_teiln vt WHERE vt. absage = 0 AND vt.veranstaltungen_id = v.id) AS anzTN
                  FROM  `veranstaltungen` AS v
                  LEFT JOIN ort o ON orte_id = o.id
                  LEFT JOIN ziel z ON v.id = z.veranstaltungen_id
                  LEFT JOIN vorlagen vv ON vv.id = v.ausvvorlagen_id "
      ;
                  if (
      $where!=="")
                     
      $querystring.="WHERE ".$where;
                  
      $dataset=$db->select($querystring); // usw ...

      an der Stelle usw... würde ich die von der Datenbank erhaltenen Daten in ein Array kopieren und dieses returnen

      Alternativ könnte die Funktion auch direkt mit dem unteren if beendet sein und nur den $querystring returnen - den du dann im jeweiligen Script an die Datenbank schickst .. das kannst du halten wie'n Dachdecker

      Bzw wo wolltest du dynamisch am Where schrauben ? etwa im SubSelect in der Klammer ? ... dann eben dort dynamisch einfügen ... PHP ist da recht flexibel
      "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

      Kommentar


      • #4
        Stichwort: Query Builder

        Kommentar

        Lädt...
        X