suche in Spalte nach einen Wert
derdessauer
- datenbank
0 derdessauer0 MudGuard0 derdessauer
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
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){
...
...
}
}
}
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 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
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
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){
...
...
}
}
Grüße,
nur wie frage ich dann ab ob z.B. die 2.Stelle größer 0 ist?
((i%10000)>999)
MFG
bleicher
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
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