Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Werte eines Arrays aus Tabelle auslesen ?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Werte eines Arrays aus Tabelle auslesen ?

    Abend

    ich habe da ein kleines Problem, welches folgendes darstellt:

    Ich habe eine Abfrage gemacht und zu dieser Abfrage kann sich der User bestimmte auf ihn zutreffende Punkte auswählen. In diese Punkte lass ich dann in der Datenbank in ein Feld in er Tabelle diese Userids als Array eintragen:
    In der Tabelle steht dann z.B. folgendes ,13,,26,,6,,9,
    ich habe die ids mit

    foreach ($user as $elem) {
    $alle .=",$elem,";
    }
    $sessionid = session_id();
    Connect();
    $rs1 = mysql_query("UPDATE aus_aus SET IIDS='$alle' WHERE SES = '$sessionid'");
    DisConnect();
    eingetragen in die Tabelle IIDS wo sie nun wie oben drinstehen.
    Nun will ich die Usernamen ausgeben lassen, aber habe keine Ahnung wie ich an die einzelnen IDs rankomme. Er gibt mir diese immer nur im Block aus ",13,,26,,6,,9,"
    Ich komme da leider auf keinen grünen Zweig

    Kann mir dabei eventuell jemand helfen ?

    greetz
    Pega


  • #2
    Abgesehen, davon, dass das nicht ein sehr schlaues DB-Design ist (http://www.tinohempel.de/info/info/d...alisierung.htm), und die doppelten Kommas noch weniger Sinn machen, so gehts:
    Code:
    $array = explode(',', str_replace(',,', ',', $IIDS));
    Gruss
    L

    Kommentar


    • #3
      ich hoffe, ich hab dich jetzt richtig verstanden. also damit du nicht immer sowas wie ,13,,26,,6,,9, bekommst, sondern etwas wie 13,26,6,9 , kannst du folgendes benutzen:
      Code:
      $array=array();
      foreach($user as $elem){
        $array[]=$elem;
      }
      $array=implode(",",$array);
      sollte ich dich falsch verstanden haben, bitte ich dich, das problem näher zu schildern. ich kapier das nämlich irgendwie nicht so richtig.

      Kommentar


      • #4
        ah! ich habe verstanden!

        Code:
        ...
        $r=mysql_fetch_object(mysql_query("SELECT * FROM aus_aus WHERE SES = '$sessionid' LIMIT 1;"));
        $array=explode(",",$r->IIDS);
        ...
        mich verwundern diese funktionen ein wenig. was hast du denn für ne php-version?

        Kommentar


        • #5
          Zitat von krabbenfilet
          Code:
          $array=array();
          foreach($user as $elem){
            $array[]=$elem;
          }
          $array=implode(",",$array);
          du kannst auch sofort
          Code:
          $string=implode(",",$user);
          nehmen :wink:
          [/code]

          Kommentar


          • #6
            also einfach noch mal zur genauen Erklärung
            in der Tabelle steht halt
            Code:
            ,13,,26,,6,,9,
            nun will ich die ids dir dort drinstehen rausholen, so das ich alle ids die dort stehen einzeln zur verfügung habe.
            Dann will ich ein erneutes Query starten und aus der Tabelle der User die Name der User rausholen, von den IDs die in der anderen Tabelle stehen.

            Code:
            $result=mysql_query("SELECT * FROM aus_user WHERE id='$arrayid'")
            //$arrayid sollen hier die ids aus dem Tabellenfeld sein und zwar einzeln, aber alle nicht nur 1 id
            or die("Query konnte nicht ausgeführt werden...");
            while ($content = mysql_fetch_array($result)) {
            $users=$content[uname]."
            ";
            }
            in einer Tabelle will ich dann
            Code:
            ".$users."
            hinsetzen und dann sollen die Usernamen ausgegeben werden.

            User1
            User2
            User3
            .....
            Ich will also die IDs einzeln rausholen und nicht als einen Wert, wie oben angegeben haben.

            Nur wie genau setz ich nun das implode oder explode an ?

            sry für die noobige Frage, steig da nur voll ned durch
            und will im moment auch ned alle tabellen umprogrammieren

            Kommentar


            • #7
              Hab ich dir ja geschrieben. Wenn du es so machst, hast du jedes Element in $array. Und wenn du die leeren Felder am Anfang und Ende des Arrays nicht haben willst, machst du stattdessen folgendes:
              Code:
              $array = explode(',', preg_replace(array('/^,/', '/,$/', '/,,/'), array('', '', ','), $IIDS));
              Gruss
              L

              Kommentar


              • #8
                So die id's liest er jetzt aus und ich kann sie mir untereinander wiedergeben lassen, hatte dort wohl was falsch hingeschrieben un ned gemerkt

                Jetzt kommt das eigentlich komplizierte und zwar stehen so z.B. 4 ID's in einem Tabellenfeld.

                Code:
                $array = explode(',', preg_replace(array('/^,/', '/,$/', '/,,/'), array('', '', ' ,'), $IIDS));
                foreach($array as $elem)
                echo $elem."
                ";
                In dem Falle gibt er mir dann die ID's der User die als Array in der DB gespeichert sind aus:

                13
                13
                16 8
                3 6 7 8
                7
                12 13
                13
                12 13
                19
                jetzt wollte ich per Query die Usernamen der jeweilgen ID's auslesen aus der Usertabelle, so dass anstatt der ID's die Usernamen dortstehen.

                Code:
                $result3 = mysql_query("SELECT * FROM user where id='$elem'")
                or die("Query konnte nicht ausgeführt werden...");
                while ($content = mysql_fetch_array($result3)) {
                $user=$content[uname];
                echo $user."
                ";
                }
                Er gibt mir zwar so einen usernamen wieder, aber nur der der als letztes bei den ID's im Array steht, sprich wenn dort 2 ID's stehen wie "12 13" gibt er nur den hinteren Usernamen aus bei dem anderen bleibt die ID stehen. Wie kann ich das machen das er mir alle Usernamen untereinander ausgibt für die jeweiligen Felder ? Mit noch ner Schleife drum vielleicht ?

                greetz
                Pega

                P.S.: Wie bekäme ich es sinnvoller hin das ich wenn mehrere ID's betroffen sind für jede ID nen Tabelleneintrag mache. Kann mir das so schwer vorstellen da dann ja jeder Eintrag obwohl es dabei um das selbe geht eine andere ID hätte oder ? würd mich aber dennoch sehr interessieren, denn inzwischen merke ich das es wie ich es mache ziemlich kompliziert zu sein scheint

                Kommentar


                • #9
                  Vielleicht so?

                  Code:
                  $bedingung = "WHERE users = `bla`";
                  foreach($array as $elem){
                     $bedingung .= " OR users = `$elem`";
                  }
                  $query = "SELECT * FROM users $bedingung";
                  $rs1 = mysql_query($query);
                  Eventuell halt noch die Bezeichnungen anpassen...

                  KMAssS

                  Kommentar


                  • #10
                    hmmm

                    was ich daran nur nicht wüßte ist was ich als Abfrage einsetzen sollte, also für das `bla`
                    Würde ja hinschreiben WHERE id='$id'
                    das $id hier sind die id's aus dem Array welches ich in der DB abgelegt habe, sprich die mehreren pro Tabellenfeld.

                    Aber ich kann ja nicht etwas als Variable einsetzen, was ich nach der Abfrage erst errechne bzw erstelle oder ?
                    vllt denke ich da jetzt auch einfach falsch :wink:

                    könnt auch sein das ich mir durch diesen komplizierten Array Datenbankeintrag das alles ein wenig kompliziert mache

                    greetz
                    Pega

                    Kommentar


                    • #11
                      Dieses "bla" ist nur so eine Art notlösung von mir. Ich schreibe da etwas rein, was nie zutreffen kann (z.B. ein String mit Buchstaben für ein Feld, das nur Zahlen erlaubt). Dann kann ich nämlich immer "OR id=`$id`" anfügen und muss mich nicht darum kümmern, dass beim ersten mal "WHERE" steht und bei allen anderen "OR"... vielleicht hat ja jemand ne bessere Lösung...

                      KMAssS

                      [EDIT]Kleine Erklärung: Die IDs stehen in $array. Dessen Elemente werden dann in die $bedingung geschrieben. Ungefähr so:
                      Code:
                      WHERE id = `1` OR id = `12` OR id = `34`
                      $bedingung wird dann in $query eingefügt und $query ausgeführt. So werden alle Datensätze, die bei der Spalte id einen Wert enthalten, der in $array steht, angezeigt (und die, die dort 'bla' stehen haben, aber es wird wohl nie eine echte ID geben, die 'bla' heißt)[/EDIT]

                      Kommentar


                      • #12
                        Moin

                        so hab jetz verstanden was du meintest, vom Prinzip her.

                        Aber da macht mich 1 Sache aus rein logischer Natur her stutzig und zwar das "OR"

                        Ich will ja das ich mit der abfrage alle id durchlaufen lasse die in den jeweilgen tabellenfeldern stehen zuerst das erste tabellenfeld, dort die ID's dann den ids namen zuordnen und weiter

                        Allerdings habe ich doch bei OR den effekt das er mir nur eine ID ausliest oder ?

                        für das `bla` könnt ich auch 0 schreiben oder ? die 0 kommt ja als ID nicht vor

                        Code:
                        $array = explode(',', preg_replace(array('/^,/', '/,$/', '/,,/'), array('', '', ' ,'), $IIDS));
                        $bedingung = "WHERE id = '0'";
                        foreach($array as $elem){
                           $bedingung .= " OR id = '$elem'";
                        }
                        $query = "SELECT * FROM user $bedingung";
                        $rs1 = mysql_query($query)
                        or die("Query konnte nicht ausgeführt werden...");
                        	while ($cont = mysql_fetch_array($rs1)) {
                        	$u=$cont[user];
                        	}

                        So schaut das jetzt aus bei einem
                        Code:
                        echo $u."
                        ";
                        gibt er mir allerdings immer noch nur 1 Namen aus

                        Kommentar


                        • #13
                          Zitat von Pegasus
                          für das `bla` könnt ich auch 0 schreiben oder ? die 0 kommt ja als ID nicht vor
                          Richtig!
                          Zitat von Pegasus
                          Moin
                          Allerdings habe ich doch bei OR den effekt das er mir nur eine ID ausliest oder ?
                          Nee, wieso? Das OR bedeutet: "Zeige mir alle Zeile an, wo die Spalte den Wert 1,2,4,13 ODER 67 hat." Also werden alle Zeilen angezeigt, wo eine dieser IDs vorkommt.

                          Um die Antwort auf die Frage zu finden, warum nur eine ID auftaucht, würde ich so vorgehen: Erst mal schauen, ob das Array richtig zerlegt wurde und dann schauen ob der richtige Querystring erzeugt wurden und dann schauen ob der Querystring so z.B. über phpMyAdmin funzt.

                          Falls dir das nicht klar ist: du brauchst natürlich zwei DB-Abfragen: die erste, um den String "1,2,45,67,89" zu holen (dann wird dieser String zerlegt) und die zweite die nach diesen IDs sucht.

                          KMAssS

                          Kommentar

                          Lädt...
                          X