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

  • Gast-Avatar
    Ein Gast erstellte das Thema [Erledigt] Werte eines Arrays aus Tabelle auslesen ?.

    [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

  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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]

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    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));

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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]

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    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));

    Einen Kommentar schreiben:

Lädt...
X