derdessauer: suche in Spalte nach einen Wert

Guten Tag

ich habe da ein Problem mit einer SQL Anweisung, ich hoffe mir kann geholfen werden

ich habe 2 Tabellen, in der Einen befindet sich die Liste der User die gerade online sind und in der Zweiten die Daten zu den einzelnen Usern

gekürzter Tabellenaufbau:

Tabelle "online":
session_user_id

Tabelle "usr":
usr_id, name, gruppe

mein Problem ist nun die Spalte "gruppe" in der sich mehrere Zahlen mit Semikolon getrennt befinden, jedes der Zahlen hat eine andere Bedeutung
nun möchte ich z.B. abfragen welcher User online ist bei dem auch unter "gruppe" nach dem 1.Semikolon eine Zahl größer 0 steht

bisher habe ich es so gelöst (was beim Einsatz von LIMIT nicht mehr so schön aussieht, da nicht immer die gleiche Anzahl an Ergebnissen angezeigt wird):

$abfrage_online = mysql_query ("SELECT session_user_id FROM session WHERE session_user_id > '0'");
$auslesen_online = mysql_fetch_array($abfrage_online);
$abfrage = mysql_query ("SELECT usr_id, name, gruppe FROM usr WHERE usr_id='".$auslesen_online['session_usr_id']."'");
while ($auslesen = mysql_fetch_arry($abfrage)){
$gruppe = explode (";", $auslesen['gruppe']);
if ($gruppe[1] > 0){
...
...
}
}

meine Frage ist ob man den Explode und die IF-Anweisung irgendwie in die SQL-Abfrage integrieren kann, so das ich bei Anwendung von LIMIT auch immer die gleiche Anzahl an Ergebnissen angezeigt bekomm

  1. hab nen Tippfehler im Code gehabt, hier nochmal der richtige Code:

    $abfrage_online = mysql_query ("SELECT session_user_id FROM session WHERE session_user_id > '0'");  
    while ($auslesen_online = mysql_fetch_array($abfrage_online)){  
    $abfrage = mysql_query ("SELECT usr_id, name, gruppe FROM usr WHERE usr_id='".$auslesen_online['session_usr_id']."'");  
    while ($auslesen = mysql_fetch_arry($abfrage)){  
    $gruppe = explode (";", $auslesen['gruppe']);  
    if ($gruppe[1] > 0){  
    ...  
    ...  
    }  
    }  
    }
    
  2. Hi,

    mein Problem ist nun die Spalte "gruppe" in der sich mehrere Zahlen mit Semikolon getrennt befinden

    Genau dieses Problem solltest Du beseitigen.

    jedes der Zahlen hat eine andere Bedeutung

    Warum hast Du Daten unterschiedlicher Bedeutung in eine Spalte gepackt?
    Das ergibt keinen Sinn.

    Trenne die zusammengewürfelten Daten in einzelne Spalten auf.

    (Wenn es, wie die Spaltenbenennung andeutet, die Zugehörigkeit zu verschiedenen Gruppen ist: erzeuge eine Zuordnungstabelle User-Gruppe)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Warum hast Du Daten unterschiedlicher Bedeutung in eine Spalte gepackt?
      Das ergibt keinen Sinn.

      Trenne die zusammengewürfelten Daten in einzelne Spalten auf.

      (Wenn es, wie die Spaltenbenennung andeutet, die Zugehörigkeit zu verschiedenen Gruppen ist: erzeuge eine Zuordnungstabelle User-Gruppe)

      die Bedeutung ist nicht wirklich unterschiedlich
      dies war für mein Wissen die beste Lösung um mir 4 extra Spalten zu ersparen nur um jeweils die Zahlen von 0-4 dort eintragen zu können

      die Filterfunktion will ich erst jetzt (Jahre später) einfühgen und dachte mir vielleicht gibts da eine Lösung um mir die Arbeit zu ersparen die fasst 100 Einträge die bisher entstanden sind umzuschreiben

      1. Grüße,
        vllt lässt es sich komplett anders lösen - wie viele zahlen sind es den? 4 zahlen jeweils von 1 bis 4? das sind gerademal 256 permutationen, sodass du einfach jedes eintrag durch eine ienzelne zahl ersetzen kannst
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
        1. Grüße,
          vllt lässt es sich komplett anders lösen - wie viele zahlen sind es den? 4 zahlen jeweils von 1 bis 4? das sind gerademal 256 permutationen, sodass du einfach jedes eintrag durch eine ienzelne zahl ersetzen kannst
          MFG
          bleicher

          die Idee hatte ich auch schon, nur das ich einfach die Semikolons weglassen wollte, dadurch würde eine 5stellige Zahl entstehen
          es wären 5 Zahlen jeweils von 0-4

          nur wie frage ich dann ab ob z.B. die 2.Stelle größer 0 ist?
          bzw. in einer anderen Abfrage für eine andere Ansicht müsste ich dann genau wissen welche Zahl z.B. an der 2. Stelle steht

          ich habe die 2.Abfragen mal in eine zusammengefasst, ob das so geht konnte ich aber noch nich testen, aber da sieht man dann mal wie das ganze mit LIMIT aussieht, ist auch eine andere Stelle, darum auch andere Tabellen:

          $abfrage_usr = mysql_query ("SELECT A1.usr_id,A1.COUNT(*),A2.user,A2.gruppe  
          FROM usr A2, Bilder A1  
          WHERE A1.usr_id = A2.usr_id AND A1.kommentar = '0'  
          GROUP BY A1.usr_id ORDER BY A1.COUNT(*) DESC LIMIT 1, 10");  
          while ($auslesen_usr = mysql_fetch_array($abfrage_usr)){  
          $gruppe = explode (";", $auslesen_usr['gruppe']);  
          if ($gruppe[1] > 0){  
          ...  
          ...  
          }  
          }
          
          1. Grüße,

            nur wie frage ich dann ab ob z.B. die 2.Stelle größer 0 ist?

            ((i%10000)>999)
            MFG
            bleicher

            --
            __________________________-

            FirefoxMyth
        2. Hi,

          vllt lässt es sich komplett anders lösen - wie viele zahlen sind es den? 4 zahlen jeweils von 1 bis 4? das sind gerademal 256 permutationen, sodass du einfach jedes eintrag durch eine ienzelne zahl ersetzen kannst

          Daten in Tabellen atomar zu halten ist eine der eher weniger umstrittenen Formen der Normalisierung. Und obwohl dein Tipp möglich ist, kann ich nur Andreas wiederholen: normalisiere anständig. Und das kann man auch im Nachhinein machen.

          Bis die Tage,
          Matti

      2. Hi,

        dies war für mein Wissen die beste Lösung um mir 4 extra Spalten zu ersparen nur um jeweils die Zahlen von 0-4 dort eintragen zu können

        Hilfeeee! 4-Extra-Spalten-Alaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        Alle Mann in die Rettungsboote - Frauen und Kinder zuerst an die Front.

        Ach ne, ist ja nichts gefährliches.
        Ich versteh nicht, warum immer wieder Leute auf die Idee kommen, mehrere Daten in eine Spalte zu quetschen, um sich dann mit den Selects wieder rumzuquälen.

        Was ist so schlimm an ein paar Zusatzspalten?

        die Filterfunktion will ich erst jetzt (Jahre später) einfühgen

        und mußt jetzt unter Deiner Dummheit/Columnophobie von damals leiden.

        und dachte mir vielleicht gibts da eine Lösung um mir die Arbeit zu ersparen die fasst 100 Einträge die bisher entstanden sind umzuschreiben

        Wahnsinn. 100 Einträge. Wie tragisch.
        Da kann man das ja fast von Hand machen.

        Egal wie viele Datenbankeinträge - mit einem kleinen Scriptchen erledigt man das unabhängig von der Anzahl der Einträge ziemlich schnell ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.