Ankündigung

Einklappen
Keine Ankündigung bisher.

Ergebnisse aus SQL String in Variable schreiben & mit Wert aus DB vergleichen

Einklappen

Neue Werbung 2019

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

  • Ergebnisse aus SQL String in Variable schreiben & mit Wert aus DB vergleichen

    Hallo zusammen,

    bin neu hier im Forum, absoluter php Anfänger und poste gleich mal meine für mich unlösbare Aufgabe.

    Eine SQL-Abfrage liefert mir mehrere Datensätze (id's) aus der Datenbank
    PHP-Code:
    SELECT id from ... 
    Problem 1: Hätte der o.g. String nur 1 Ergebnis könnte die Variable so aussehen
    PHP-Code:
     $result = \Database::getInstance()->prepare("SELECT id from ...")->execute(); 
    Da ich aber mehrere id's aus der DB bekomme müsste jede id in eine eigene Variable geschrieben werden. Wie mache ich das am besten?

    Problem 2 : Die Variablen aus Problem 1 müssen mit einer Spalte einer DB-Tabelle $table2['id'] verglichen werden und wenn das übereinstimmt soll ausgegeben werden
    PHP-Code:
    $VAR1 $result->id;
                      if(
    $table2['id'] !== $VAR1)
                        {
                        } 
    Ich hoffe das ist einigermaßen verständlich und mir kann jemand einen Tipp geben wie ich die Sache angehen soll.
    Besten Dank!



  • #2
    Die Abfrage liefert 0 - n Datensätze, die jeweils ein Feld enthalten.
    Ein Datensatz wird i.d.R. als Arrays geliefert (Object geht aber auch) und genau das ist auch der Weg, um Daten zu sammeln.

    Übrigens: "mit Wert aus DB vergleichen" macht man am besten gleich in der Datenbank (Stichwort WHERE Bedingung)
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zitat von lstegelitz Beitrag anzeigen
      Übrigens: "mit Wert aus DB vergleichen" macht man am besten gleich in der Datenbank (Stichwort WHERE Bedingung)
      Stimmt. Habe die SQL Abfrage angepasst u in phpmyadmin getestet. Liefert mir jetzt direkt die gewünschten ID´s.

      Soweit so gut.

      Hast du noch einen Tipp wie ich den return aller ID´s auslösen kann.

      PHP-Code:
      --------?----------
      {
      return;

      Kommentar


      • #4
        Erstmal musst du alle ID sammeln, dann kannst du diese Sammlung zurückgeben.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Zitat von marcohe Beitrag anzeigen
          Problem 1: Hätte der o.g. String nur 1 Ergebnis könnte die Variable so aussehen
          PHP-Code:
           $result = \Database::getInstance()->prepare("SELECT id from ...")->execute(); 
          Und was soll dann in $result stehen? execute liefert true oder false, eine ID bekommst du da nicht. Auch brauchst du ohne Parameter kein prepare - und was liefert Database::getInstance()? Eine PDO-Verbindung? So funktioniert das ganze auf jeden Fall nicht, du musst das schon auf mehrere Zeilen aufteilen und v.a. das Ergebnis auch abholen.

          Da ich aber mehrere id's aus der DB bekomme müsste jede id in eine eigene Variable geschrieben werden. Wie mache ich das am besten?
          IDs, ohne Apostroph! Und nein, da braucht nicht jede Variable eine eigene Variable, Arrays existieren. Aber wie gesagt, du musst die Daten natürlich erst abholen - wenn du nur eine Spalte aus der Datenbank holst ist da ein fetchAll(PDO::FETCH_COLUMN) sehr hilfreich (mit PDO natürlich).

          Was mir allerdings noch nicht klar ist: was hast du eigentlich genau vor …?

          Kommentar


          • #6
            Hallo tk1234,
            danke für die Rückmeldung. Ich poste einfach mal etwas mehr Code vllt. wird es dann verständlicher. In dem Code soll es 2 Filter geben.
            1. filter_kuenstler (hier findet die SQL-Abfrage genau eine ID die dann mit der Spalte "kuenstler" einer anderen Tabelle (tl_events) abgeglichen wird -> das funktioniert)
            2. filter_genre (hier findet die SQL-Abfrage direkt mehrere IDs aus der Spalte "id" der Tabelle (tl_events). Alle Datensätze mit der ID sollen ausgegeben werden -> funktioniert nicht....
            PHP-Code:
            <?php

             
            class EventsUrlFilter
             
            {

              public function 
            __invoke ($arrEvents$arrCalendars$intStart$intEnd$objModule) {


                     foreach (
            $arrEvents as $key=>$days)
                     {
                         foreach (
            $days as $day=>$events)
                         {
                             foreach (
            $events as $arrCol=>$event)
                             {
                      switch (
            $objModule->events_filter) {

                        case 
            'filter_kuenstler':

                        
            $aliasUrl = \Input::get('auto_item');
                        
            $result = \Database::getInstance()->prepare("SELECT id FROM ...")->execute(1); // Liefert einen Datensatz (funktioniert)
                        
            $ARTIST $result->id;
                              if(
            $event['kuenstler'] !== $ARTIST)
                                {
                                    unset(
            $arrEvents[$key][$day][$arrCol]);
                                }

                          break;


                        case 
            'filter_genre':

                        
            $aliasUrl = \Input::get('auto_item');
                        
            $result = \Database::getInstance()->prepare("SELECT id from ...")->execute(); // Liefert mehrere Datensätze (funktioniert nicht)
                        
            $GENRE $result->id;
                              if(
            $event['id'] !== $GENRE)
                                {
                                    unset(
            $arrEvents[$key][$day][$arrCol]);
                                }

                          break;

                        case 
            'filter_none':

                          break;

                        default:

                          break;
                      }
                             }
                         }
                     }

                return 
            $arrEvents;
               }
             }

            Kommentar


            • #7
              Zitat von tk1234 Beitrag anzeigen
              fetchAll(PDO::FETCH_COLUMN) sehr hilfreich (mit PDO natürlich).
              Werde ich mich mal einlesen. Danke.

              Kommentar


              • #8
                Gelöscht

                Kommentar


                • #9
                  So Dinge wie \Database::getInstance() sollte man vermeiden, da sie nur unnötige globale Abhängigkeiten bringen. Sinnvoller wäre, wenn die Funktion/Klasse alle Objekte, die sie benötigt, als Parameter übergeben bekommt. Also wenn eine Funktion/Klasse eine Datenbankverbindung benötigt, dann sollte die sie sich nicht selber beschaffen müssen. Ansonsten wird das ganze sehr unflexibel und schwer testbar.

                  Kommentar

                  Lädt...
                  X