php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.09.2009, 23:07  
Benutzer
 
Registriert seit: 05.06.2009
Beiträge: 50
PHP-Kenntnisse:
Anfänger
rodger befindet sich auf einem aufstrebenden Ast
Standard buddylist ohne zusätzliche Tabelle?!

Tagchen,

ich versuche grade ein buddy-system für meine Webseite zu schreiben. Nun frage ich mich, soll ich eine neue Tabelle anlegen, oder mit der bestehenden user-tabelle arbeiten, in der username, uid, adresse etc abgespeichert werden.

Ich dachte mir dabei, man könnte doch das Feld auslesen und im Falle einer einladung die neue uid mit einem drangehängten "," an den bestehenden String anhängen. dann könnte man bei Bedarf das Feld auslesen, um zu sehen, ob der string zb "25," im feld enthalten ist. so könnte man sich die zusätzliche tabelle sparen und wohl auch einige SELECT-Abfragen.
Haltet ihr das für eine gute Vorgehensweise oder eher nicht? mich würde auch interessieren, wie resourcenintensiv so eine stringüberprüfung dann wäre.

Vielen Dank für eure antworten, Rodger
rodger ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.09.2009, 23:29  
Erfahrener Benutzer
 
Registriert seit: 28.08.2009
Beiträge: 233
PHP-Kenntnisse:
Anfänger
Steve befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rodger Beitrag anzeigen
Ich dachte mir dabei, man könnte doch das Feld auslesen und im Falle einer einladung die neue uid mit einem drangehängten "," an den bestehenden String anhängen. dann könnte man bei Bedarf das Feld auslesen, um zu sehen, ob der string zb "25," im feld enthalten ist. so könnte man sich die zusätzliche tabelle sparen und wohl auch einige SELECT-Abfragen.
Moin rodger,

es ist grundsätzlich falsch, in einem Feld CSV-Werte zu speichern, das schreit förmlich nach (Stichwort) Normalisierung.

Du hast eine 1:n-Beziehung (ein Benutzer kann beliebig viele Buddys haben), also mein Vorschlag, eine zusätzliche Tabelle:
Id, UserId, BuddyUserId

Und mach dich in dem Zusammenhang auch über Einführung in Joins schlau, du benötigst nämlich keine zusätzlichen Abfragen.
Steve ist offline  
Alt 25.09.2009, 23:32  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.115
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

also normalerweise hat man für sowas 2 tabellen. user und buddys mit folgenden spalten:

user

id | username | ....

buddys

id | userid | buddyid | allow(oder etwas in der art) | ....

also wer hat wen als freund und hat der user den anderen als freund akteptiert oder nicht

MFG
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline  
Alt 25.09.2009, 23:38  
Benutzer
 
Registriert seit: 05.06.2009
Beiträge: 50
PHP-Kenntnisse:
Anfänger
rodger befindet sich auf einem aufstrebenden Ast
Standard

Hi,

ich nehme mal an CSV steht für comma separated value?! und normalisierung bedeutet in diesem Zusammenhang was?
EDIT: ok, lese grad in dem link, da steht ja was über die Normalisierung, alles klar.
Das mit den Joins werd ich mir jetzt mal anschauen.

Geändert von rodger (25.09.2009 um 23:52 Uhr).
rodger ist offline  
Alt 25.09.2009, 23:43  
Benutzer
 
Registriert seit: 05.06.2009
Beiträge: 50
PHP-Kenntnisse:
Anfänger
rodger befindet sich auf einem aufstrebenden Ast
Standard

@Blackscorp

ja, das hab ich nun schon öfter gesehen. da wird dann für jeden Vorgang einer einladung ein neuer Datensatz angelegt oder?
Also ich finde die Idee mit der einen Tabelle ja nach wie vor reizvoll, wenn ihr aber alle sagt, das so eine komma-getrenntes Auslesen usw nicht do der Hit ist, dann lass ich mich da auch gern eines besseren belehren.
rodger ist offline  
Alt 25.09.2009, 23:52  
Erfahrener Benutzer
 
Registriert seit: 28.08.2009
Beiträge: 233
PHP-Kenntnisse:
Anfänger
Steve befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rodger Beitrag anzeigen
ich nehme mal an CSV steht für comma separated value?! und normalisierung bedeutet in diesem Zusammenhang was?
Zitat:
mit der bestehenden user-tabelle arbeiten, in der username, uid, adresse etc abgespeichert werden
Für uid, adresse und etc. hast du ja sicherlich auch separate Felder, nach deinem Ansatz könntest du die ja auch komma-separiert (ja, das heißt CSV) in ein Feld stopfen

Ansonsten kannst du bezüglich Normalisierung erstmal hier einsteigen:
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
Steve ist offline  
Alt 25.09.2009, 23:59  
Benutzer
 
Registriert seit: 05.06.2009
Beiträge: 50
PHP-Kenntnisse:
Anfänger
rodger befindet sich auf einem aufstrebenden Ast
Standard

mir fällt gerade noch etwas ein. und zwar arbeite ich mit TYPO3, die felder aus der Tabelle mit den userdaten werden sowieso als globale variablen gespeichert, der zugriff ist also etwas einfacher. auch deshalb fönde ich es praktisch, die daten in der fe_users tabelle zu speichern. was meint ihr?

@steve, es ist etwas anderes meinst du nicht? uid, adresse und sagen wir username sind eine feste anzahl von spalten, und zwar 3, bei der buddylist weiß man ja nicht genau, wieviele freunde der user haben wird.

Geändert von rodger (26.09.2009 um 00:02 Uhr).
rodger ist offline  
Alt 25.09.2009, 23:59  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.115
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

Zitat:
Zitat von rodger Beitrag anzeigen
Also ich finde die Idee mit der einen Tabelle ja nach wie vor reizvoll.
naja mal angenommen ich habe 20 buddys in meiner liste. Nun habe ich mich mit einem gestritten und sage buddy nr 12 löschen. der ganze Prozess würde ungefair programmiertechnisch so aussehen:

du liest meine uid aus. spaltest alle werte mit einem komma, entfernst die nr 12, setzt wieder alles zusammen und speicherst wieder alles ab.

und so würde es aussehen wenn du 2 tabellen hast:

die userid haste bestimmt sowieso irgendwo gespeichert wegen login, und die id des zu löschenden users steht ja in der url. also brauchste nur delete from buddys WHERE user = id and buddy = id und schon habe ich ein freund weniger. es ist nicht nur einfacher sondern auch noch ressourcen sparender
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline  
Alt 26.09.2009, 00:12  
Benutzer
 
Registriert seit: 05.06.2009
Beiträge: 50
PHP-Kenntnisse:
Anfänger
rodger befindet sich auf einem aufstrebenden Ast
Standard

@blackscorp
Zitat:
die userid haste bestimmt sowieso irgendwo gespeichert wegen login, und die id des zu löschenden users steht ja in der url. also brauchste nur delete from buddys WHERE user = id and buddy = id und schon habe ich ein freund weniger. es ist nicht nur einfacher sondern auch noch ressourcen sparender
das klingt wirklich nachvollziehbar. werde das nun wohl auch so machen. frage mich halt jetzt nur noch, wie da die Sache mit dem Join zu paßt? andere Frage wäre noch, ist es nun wirklcih so, das für jeden add as buddy vorgang eine neue zeile angelegt wird? ich denke mal ja. das hieße dann wohl, das sich dort rasch sehr viele Zeilen ansammeln könnten, aber das ist dann wohl egal, nehm ich mal an.
rodger ist offline  
Alt 26.09.2009, 00:17  
Erfahrener Benutzer
 
Registriert seit: 28.08.2009
Beiträge: 233
PHP-Kenntnisse:
Anfänger
Steve befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rodger Beitrag anzeigen
@steve, es ist etwas anderes meinst du nicht? uid, adresse und sagen wir username sind eine feste anzahl von spalten, und zwar 3, bei der buddylist weiß man ja nicht genau, wieviele freunde der user haben wird.
Ja, ok, der Vergleich war unpassend, aber es ist wie gesagt eine 1:n-Beziehung und diese lagert man gewöhnlich in eine separate DB-Tabelle aus.
Du kannst natürlich auch Arrays in Feldern speichern, aber früher oder später schießt du die damit ins Knie, glaub mir

Wenn ich mich jetzt in dich hineinversetzen soll (aus eigener Erfahrung), würde ich meinen, du hast eine Abneigung gegen JOINs (maximal hast du bisher ein Implizites genutzt) und bevorzugst desshalb deine Ansicht.
Steve ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
tabelle 2 in tabelle 1 updaten steffen_dk Datenbanken 11 04.07.2009 15:04
pro Benutzer eine Tabelle mit Feldern oomworld PHP Tipps 2009 8 19.04.2009 13:53
[Erledigt] Ab welcher Anzahl von Feldern in einer Tabelle (DB) ist eine Classe kontra Technikus PHP Tipps 2008 57 29.10.2008 15:16
Normalisierung einer chaotischen Tabelle maeck Datenbanken 10 12.12.2006 18:17
Zeilenanzahl einer tabelle mit WHERE aber ohne schleife? sovereign Datenbanken 13 17.04.2006 20:34
[Erledigt] Problem mit dem Füllen einer Tabelle über Formular PHP Tipps 2006 18 10.01.2006 12:51
Problem mit Anzeige einer Tabelle mit dem Firefox? HTML, Usability und Barrierefreiheit 8 28.11.2005 15:08
[Erledigt] Tabelle aktualisieren Datenbanken 3 23.11.2005 09:54
[Erledigt] Problem mit mySQL Datenbanken 7 27.09.2005 12:06
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
tabelle in tabelle ohne aussenrand noskule HTML, Usability und Barrierefreiheit 6 25.08.2005 14:17
[Erledigt] Interne Tabelle (DB Tabelle in Array auslesen) PHP Tipps 2005 10 29.03.2005 17:08
Tabelle in Tabelle ausrichten HTML, Usability und Barrierefreiheit 7 03.01.2005 14:32
Sortieren anhand einer zweiten Tabelle PHP Tipps 2004 6 20.09.2004 09:03
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php buddylist

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum