Ankündigung

Einklappen
Keine Ankündigung bisher.

Filtern nach Array

Einklappen

Neue Werbung 2019

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

  • Filtern nach Array

    Hallo,
    diese Datenbankoperationen haben es wirklich in sich.
    Ich habe eine Tabelle

    PHP-Code:
    id  media_id
    ---+---------
    1   |   20   |  
    2   |   21   
    3   |   22   
    4   |   23   |  
    5   |   24   
    6   |   25   
    7   |   26   
    8   |   27   
    9   |   29   
    Nun habe ich ein Array mit ids die ich aus dieser Tabelle filtern will. Zum Beispiel
    PHP-Code:
    array (15 => 3,
           
    19 => 7,
           
    25 => ) ; 
    Die keys dieses Arrays sollen auch erhalten bleiben. Als Ergebnis möchte ich dieses hier haben:
    PHP-Code:
    array (15 => 22,
           
    19 => 26,
           
    25 => 29); 
    Eine Abfrage nach den ids würde ich hinbekommen, aber wie kann man es machen, dass man die keys im Array behält?


  • #2
    Zitat von stackoverflow Beitrag anzeigen
    Hallo,
    diese Datenbankoperationen haben es wirklich in sich.
    Vor allem dann, wenn das, was Du willst, nicht nachvollziehbar ist, gell?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Hol dir mit array_values() die IDs aus dem Array und lies die entsprechenden media_ids aus der Tabelle aus. Anschließend array_map() auf das Array, wo du in der Callback-Funktion die ID gegen die media_id austauschst. Beispiel kommt gleich.

      Kommentar


      • #4
        @akretschmer: Die Values des arrays (Codeblock mitte), sollen die IDs der Tabelle(oberer Codeblock) sein. Als Output soll dann der Key des Arrays mit der media_id aus erster Operation zusammenkommen (ebenfalls als key-value Paar )

        Ist nicht so schwer mit ner foreach-Schleife.

        Kommentar


        • #5
          So hier mal als Beispiel wie das funktionieren könnte: (ist jetzt allerdings anders als oben beschrieben
          PHP-Code:
          <?php
          $ids 
          = array(15 => 319 => 725 => 9);
          $values array_values($ids);

          // Hier musst die Abfrage machen, der Einfahckeit halber mal übersprungen
          //echo "SELECT * FROM table WHERE id IN (".implode(",", $values).")";
          $sqlResult = array(=> 22=> 26=> 25);

          $keys array_keys($ids);
          $newValues array_values($sqlResult);

          $ergebnis array_combine($keys$newValues);
          var_dump($ergebnis);
          ?>
          Nachdem man aber nicht weiß was für eine Art von Beziehung die IDs haben, gibt es sicherlich einige Fälle wo das mit dieser Lösung nicht klappt.

          Kommentar


          • #6
            PHP-Code:
            foreach($komischesArray as $id){
                
            $query();
                
            $neuesArray[$id] = $queryErgebnis['media_id'];

            Damit hast du dann ein Array mit den alten Keys und den media_ids dazu, muss akretschmer aber zustimmen, die Problembeschreibung ist schwer nachvollziehbar
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              Zitat von VPh Beitrag anzeigen
              PHP-Code:
              foreach($komischesArray as $id){
                  
              $query();
                  
              $neuesArray[$id] = $queryErgebnis['media_id'];

              Damit hast du dann ein Array mit den alten Keys und den media_ids dazu, muss akretschmer aber zustimmen, die Problembeschreibung ist schwer nachvollziehbar
              Eine Lösung rein in der DB:

              Code:
              test=*# select * from st;
               id | media_id
              ----+----------
                1 |       20
                2 |       21
                3 |       22
                4 |       23
                6 |       25
                7 |       26
                8 |       27
                9 |       29
                5 |       24
              (9 rows)
              
              Time: 0,175 ms
              test=*# select hstore(skeys,media_id::text) from (select *, skeys('15=>3,19=>7,25=>9'), svals('15=>3,19=>7,25=>9') from st where id in (select svals('15=>3,19=>7,25=>9')::int)) foo where id=svals::int;
                 hstore
              ------------
               "15"=>"22"
               "19"=>"26"
               "25"=>"29"
              (3 rows)
              Ohne Schleifen und so, ...
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                super, danke, da gibt es ja wirklich viele Methoden.

                Die letzte rein über Datenbank ist wahrscheinlich die schnellste aber ein bisschen kompliziert. Schaue ich mir auch mal an. Die anderen funktionieren.
                Schon interessant wie unterschiedlich man da rangehen kann.

                Sorry, wenn die Beschreibung nicht deutlich war, ich hatte mir eigentlich Mühe gegeben. Ist ja das mindeste. Ich habs mir eben noch einmal durchgelesen - so ganz verstehe ich nicht, was daran zu unverständlich ist und wäre da über einen Tipp dankbar ... damit ich es das nächste Mal besser machen kann.

                Ganz vielen Dank für die viele Hilfe

                Kommentar


                • #9
                  Ohne alxy hätte ich nicht erkannt wie die Daten in Verbindung stehen, da fehlte mir ein bisschen Kontext.
                  Auf einmal ist da son Array ohne Namen mit nur irgendwelchen Zahlen als Keys und Values und beim erwarteten Ergebnis steht auch nicht welche Zahlen das da im Array denn sind.

                  Die Lösung innerhalb der Datenbank wäre wohl wirklich am besten und, da die obligatorische abfällige Bemerkung gegen MySQL fehlt, wohl sogar in MySQL einsetzbar.
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar


                  • #10
                    Zitat von VPh Beitrag anzeigen
                    Die Lösung innerhalb der Datenbank wäre wohl wirklich am besten und, da die obligatorische abfällige Bemerkung gegen MySQL fehlt, wohl sogar in MySQL einsetzbar.
                    Sorry, hatte ich vergessen.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Skandal :/
                      Relax, you're doing fine.
                      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                      Kommentar

                      Lädt...
                      X