@querschlaeger, danke für die zusätzlichen Infos und Hinweise. An was man alles denken muß *ztztzt*
@Jockl, hast du bereits Fortschritte gemacht und ein Template erstellt?
Ich habe keine Ahnung wie die Buddylist gespeichert wird (nutze die nirgends) aber wenn es csv oder array als String ist könnte man da eventuell noch ein LIKE einwerfen... MyBB macht das an einigen Stellen genauso. Bescheuert, zumal dazu dem Feld noch Kommata angehängt werden müssen, anstatt die gleich fest einzubauen, aber so ists halt.
Code:
(CONCAT(',',forums,',') LIKE '%,$fid,%'
s/forums/buddylist, s/$fid/$uid ...
Damit spart ihr euch die while-schleife bzw. das explode / if
Naja, passiert halt, wenn man SQL-Tabellen nicht normalisiert, sondern kommagetrennte Werte als ein einziges Attribut abspeichert...
Das ist zwar nicht elegant, aber funktioniert doch gut? Wie würdet ihr das denn lösen?
Das funktioniert, aber wenn ich mir die MyBB-Datenbank aus Sicht eines "Datenbankdesigners" (sofern es diese Bezeichnung gibt
) anschaue, dann muss ich die Hände über den Kopf zusammenschlagen...
Hier bietet sich z.B. eine Hilfstabelle an:
Code:
ID | USER | BUDDY
1 | 1 | 2
2 | 1 | 3
3 | 1 | 14
4 | 3 | 14
5 | 14 | 1
6 | 1 | 5
n | |
Das würde Buddy-Afbfragen extrem vereinfachen (Pseudocode):
Code:
Suche alle BUDDY wo USER ist m
Das liefert alle Freunde von einem User.
Code:
Suche alle USER wo BUDDY ist m
Das würde das Problem dieses Threads lösen.
(07.04.2010, 11:51)Olaf schrieb: [ -> ]@Jockl, hast du bereits Fortschritte gemacht und ein Template erstellt?
Ehrlich gesagt, habe ich an dem php-Code nicht mehr weiter "gewerkelt" und deshalb auch nicht am Template.
An der Tatsache, dass die Tabelle nicht normalisiert ist, kommt man ja wahrscheinlich erst einmal nicht dran vorbei.
Angeregt durch frostschutz' Hinweis habe ich mal mit folgendem Code im PHPMyAdmin gespielt:
Code:
SELECT uid, buddylist FROM `users` WHERE buddylist LIKE "%,X,%" ORDER BY uid ASC
"X" ist dabei die uid, nach der man in der Buddylist sucht.
Problem: wenn sich "X" am Ende des Arrays befindet, erhält man mit der o.a. Zeile kein Ergebnis. Hier müsste man mit LIKE "%,X%" bzw. mit LIKE "%,X" suchen.....
@Jockl,
Ja, das meinte ich ja mit "bescheuert". Du musst das Feld vor dem LIKE mit CONCAT um , am Anfang und am Ende erweitern.
@StefanT,
Also ich würde mindestens die zusätzlichen , direkt ins Feld speichern. Das CONCAT macht das Query unglaublich langsam. Eines der vielen Dinge in MyBB die unnötig sind wie ein Kropf, mit der Änderung von einer Zeile behoben werden könnten, was aber nicht gemacht wird da es ja dann nichts mehr gäbe, was man in MyBB 2 dann endlich richtig machen könnte...
@querschlaeger,
So eine Tabelle wäre natürlich die Kirsche auf der Sahne auf dem Törtchen, aber sowas kann man hier ja von vorneherein gar nicht erwarten.
Naja, die Code-Basis ist halt schon Jahre alt... Ich denke, mit MyBB 2 wird so etwas nicht mehr gemacht.
Was ist denn besser, eine zusätzliche Tabelle oder CSV-Daten?