buddy system

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von mcnewbie, 04.12.2006.

  1. mcnewbie

    mcnewbie Thread Starter MacUser Mitglied

    Beiträge:
    1.213
    Zustimmungen:
    5
    MacUser seit:
    09.08.2004
    hallo leute,

    hab grad ein massives denkproblem. wir programmiern da gerade an einem buddy system für eine applikation.

    mir gehts jetz darum, dass ich rausfinde welcher user wen als buddy hat und wie der user buddies hinzufügen kann.

    ich hab jetz mal 2 tabellen:

    1. user - uid | username | bla | bla
    2. buddies - uid | bid

    in der 2. hätt ich halt die user id und als bid die use id des users, den user X als buddy hat


    gut jetz ahb ich da zB in tabelle 2

    1 | 2
    1 | 2
    2 | 5
    2 | 7

    alles fein soweit

    jetz will ich einen query der mir alle usernamen der buddies von user '1' gibt.... ich bin gerade zu doof und komm nciht drauf, bin für hilfe dankbar!!

    cheers
     
  2. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    MacUser seit:
    12.03.2005
    SELECT bid FROM tabelle WHERE id = 2;

    ?
    Oder hab ich dich falsch verstanden
     
  3. mcnewbie

    mcnewbie Thread Starter MacUser Mitglied

    Beiträge:
    1.213
    Zustimmungen:
    5
    MacUser seit:
    09.08.2004
    ja scho, aba die id is ne zahl udn ih will den nahmen *grübel*
     
  4. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    MacUser seit:
    12.03.2005
    du machst dann einfach in einer schleife eine abfrage mit dem result der ersten abfrage mit jeweils

    SELECT username FROM user WHERE id=result;

    --> in der schleife
     
  5. mcnewbie

    mcnewbie Thread Starter MacUser Mitglied

    Beiträge:
    1.213
    Zustimmungen:
    5
    MacUser seit:
    09.08.2004
    hm ja das wäre ein idee... ein einem query gehts ned oda?
     
  6. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    MacUser seit:
    12.03.2005
    oja mit Joins, aber da musst du auf die antwort eines anderen warten aber irgendwie so:

    SELECT id, bid, username FROM user,buddies WHERE id = 2;

    aber für sowas hast du glaube ich eine falsche datenstruktur

    aber such mal nach joins bzw semi joints
     
    Zuletzt bearbeitet: 05.12.2006
  7. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.039
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    Es muss heissen joins und genau damit geht es!

    Code:
     SELECT bid, username FROM user,buddies WHERE id = 2 and buddies.uid=user.uid
    
     
  8. PowerBookGrafik

    PowerBookGrafik MacUser Mitglied

    Beiträge:
    812
    Zustimmungen:
    5
    MacUser seit:
    12.03.2005
    danke dir ... gibts irgendwo ne kleine site über joins wo diese gut erklärt sind ?
     
  9. Gunter_S

    Gunter_S MacUser Mitglied

    Beiträge:
    150
    Zustimmungen:
    3
    MacUser seit:
    15.03.2004
    ja, mysql.com

    Ich würde allerdings zu "LEFT JOIN" tendieren, da das weniger aufwendig als ein einfacher JOIN ist. Das würde dann so aussehen:
    Code:
    SELECT `t2`.* FROM buddies AS `t1` LEFT JOIN user AS `t2` ON (`t1`.`bid` = `t2`.`uid`) WHERE (`t1`.`uid` = 2) AND (`t1`.`bid` IS NOT NULL)
    
    Ein LEFT JOIN bearbeitet erst die die Datensätze aus der ersten Tabelle und sucht dann die dazu passenden Datensätze aus der zweiten Tabelle (usw.: können ja auch mehr wie zwei Tabellen sein).
    Ein einfacher JOIN dagegen kombiniert erst beide Tabellen und sucht dann in der "erzeugten" Tabelle. Das führt bei großen Tabellen zu einem erheblichen Mehraufwand.

    Gunter
     
  10. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.039
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    :jaja: recht Du hast! Ich hab's nicht gemacht, weil ich eher selten mit mysql arbeite und mir nicht sicher war welche Version nun was kann (ich nutze meist MS SQL mit Transact SQL).
     
Die Seite wird geladen...

Diese Seite empfehlen