tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
639
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Hallo,
    ich code zurzeit ein Soziales Netzwerk und habe dafür natürlich ein Freundesscript erstellt welches Freunde speichert und wiedergibt. Jetzt würde ich damit gerne gemeinsame Freunde ausgeben. (Beispiel: Personen die du vielleicht kennst: Beispiels User (2 gemeinsame Freunde). Mein Script zum ausgeben der Freunde ist folgendes:
    PHP-Code:
    echo "<h2>Freunde:</h2>";
      
    $query mysql_query("SELECT freunde FROM benutzer WHERE ID = '" .$row->ID"'"); }
      while(
    $row mysql_fetch_array($query)) {
      
    $friends unserialize($row["freunde"]);

      if(isset(
    $friends[0])) {
      foreach(
    $friends as $friend) {
      
    $_query mysql_query("SELECT Vorname, bild,  Name FROM benutzer WHERE ID = '" $friend "'");
      
    $_row mysql_fetch_array($_query); 
    Könnte mir vielleicht jemand einen Ansatz posten wie ich vorgehen kann? Wäre sehr nett
    Liebe Grüße tl2011
     

  2. #2
    Avatar von String
    String String ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    238
    Du speicherst die Freunde also in ein Array serialisiert?
    Ich zweifel ein wenig daran, ob das wirklich sinnvoll ist, wenn du funktionen wie Freundes-Freunde nutzen willst.

    Du müsstest jetzt hingehen, und in deiner foreach noch eine abfrage machen, ob ein User eine Freundes id von dir in seiner Freundes-Spalte hat.

    $ids = join(',',$);
    WHERE freunde IN ($ids)

    Allerdings, geht das wahrscheinlich nicht, weil du die freunde eben in einem array in MySQL ablegest.

    Vielleicht WHERE freunde LIKE ':$freundid' -> Das müsste dann für jede deiner Freundes-IDs machen..

    Wie gesagt, die serialize halte ich hier für wenig sinnvoll

    Aber vielleicht vertue ich mich auch und jemand kann dir gleich eine Lösung nennen

    paD
    tl2011 bedankt sich. 

  3. #3
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich stimme String zu, dass das der Ansatz nicht gut gewählt ist.


    Zitat Zitat von tl2011 Beitrag anzeigen
    Könnte mir vielleicht jemand einen Ansatz posten wie ich vorgehen kann?
    Lass die Relationale Datenbank das tun, wofür sie gemacht ist. Nämlich Relationen (Beziehungen, Verbindungen, also sowas wie Freundschaften ) zu modellieren.

    Wirf die Spalte "freunde" raus und nimm stattdessen eine dritte Tabelle namens "freunde", in der du zwei Spalten für die ID der jeweiligen Personen hast.

    Dann kannst du mit einer einzigen MySQL Abfrage dein Problem lösen und das völlig ohne PHP Code.
    chmee bedankt sich. 

  4. #4
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Absolut richtig. Einfache Beziehungen sind das A und O in relationalen Datenbanken, um effizient zu sein.

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich habe das mal schnell durchgespielt:

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    mysql> SELECT * FROM users;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | alex  |
    |  2 | hans  |
    |  3 | peter |
    +----+-------+
    3 ROWS IN SET (0.00 sec)
     
     
    mysql> SELECT * FROM friends;
    +--------+----------+
    | userid | friendid |
    +--------+----------+
    |      1 |        2 |
    |      1 |        3 |
    |      2 |        3 |
    +--------+----------+
    3 ROWS IN SET (0.00 sec)
     
     
    mysql> SELECT users.name FROM users, friends AS f1, friends AS f2 WHERE f1.userid = 1 AND f2.userid = 2 AND users.id = f1.friendid AND f1.friendid = f2.friendid;
    +-------+
    | name  |
    +-------+
    | peter |
    +-------+
    1 ROW IN SET (0.00 sec)


    Es gibt drei Personen Alex, Hans und Peter. Alex hat Hans und Peter als Freunde. Hans hat nur Peter als Freunde. Die Letzte Abfrage liefert die gemeinsamen Freunde von Alex und Hans, also Peter.
    Geändert von CPoly (19.01.12 um 19:49 Uhr)
    tl2011 bedankt sich. 

  6. #6
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Hmm das heißt die Spalte Freunde würde in der Tabelle Benutzer wegfallen?
    Ich frage das da bereits einige "Freundschaften" gespeichert habe und sie gerne übernehmen würde.
    Liebe Grüße und danke für die Antworten
     

  7. #7
    Avatar von String
    String String ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    238
    Ist doch ganz einfach, du kannst ein Script baslten, was die Freundschaften in die neue Tabelle schreibt.
    Aber um es richtig zu machen, wirst du nicht drum rum kommen.

    Gruß
     

  8. #8
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Ja ok . Wie könnte ein solches Script denn aussehen?
    Liebe Grüße Tl2011
     

  9. #9
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Sowas in der Art

    PHP-Code:
    $query mysql_query("SELECT freunde FROM benutzer");

    while(
    $row mysql_fetch_array($query)) {
        
    $friends unserialize($row["freunde"]);

        
    //Jetzt über $friends iterieren und jeweils ein INSERT in die neue Tabelle machen.

    Das Skript brauchst du ja nur ein einziges mal.
     

  10. #10
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Okay das werde ich morgen mal probieren und dann melde ich mich zurück.
    Liebe Grüße
     

  11. #11
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Ok ich hab das Script jetzt umgecodet und die Tabelle freunde angelegt. Die User Tabelle heißt benutzer und die Felder in der freundes Tabelle heißen: user (für den User selbst) und friend (für den Freund) Allerdings habe ich von dieses Abfragen wie CPoly sie gepostet hat keine Ahnung.
     

  12. #12
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von tl2011 Beitrag anzeigen
    Allerdings habe ich von dieses Abfragen wie CPoly sie gepostet hat keine Ahnung.
    Dann solltest du es lernen. Immerhin willst du ein soziales Netzwerk programmieren.

    Hier eine Erklärung: http://www.w3schools.com/sql/sql_join.asp Aber es gibt bestimmt bessere, vielleicht auch deutsche Tutorials. Ich habs durch probieren gelernt (http://dev.mysql.com/doc/refman/5.0/en/join.html).
     

  13. #13
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    Was hat in deinem Beispiel denn das f1 bzw f2 für eine Funktion?
     

  14. #14
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich benutze zweimal die gleiche Tabelle, deshalb muss ich denen einen Alias geben. Das geht mittels "AS" Schlüsselwort oder auch ohne.

    Code sql:
    1
    2
    
    SELECT * FROM meine_tabelle AS t ...;
    SELECT * FROM meine_tabelle t ...;

    In beiden Beispielen kann man im Anschluss "t" anstatt "meine_tabelle" schreiben. In der Regel ist das eine Schreiberleichterung, in dem Fall aber wie gesagt sogar zwingend notwendig.
    tl2011 bedankt sich. 

  15. #15
    tl2011 tl2011 ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    19
    hmm ok bei folgendem Code bekomme ich allerdings einen Error
    (Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/hcsmfhii/thelasers-network.com/samplec.php on line 60)

    So sieht mein Code aus:
    PHP-Code:
      $abfrage "SELECT benutzer.Vorname FROM benutzer, freunde AS f1, friends AS f2 WHERE f1.user = 1 AND f2.user = 2 AND benutzer.ID = f1.friend AND f1.friend = f2.friend";
        
    $ergebnis mysql_query($abfrage);
        while(
    $row mysql_fetch_object($ergebnis)) {

    echo 
    "$row->Vorname"//gemeinsamer Freund

    Woran liegt das?
     

Ähnliche Themen

  1. Gemeinsame Freunde bestimmen?
    Von Alexio Vay im Forum PHP
    Antworten: 5
    Letzter Beitrag: 04.06.11, 17:39
  2. Gemeinsame Dateien
    Von SteffenBoerner im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 04.08.09, 15:00
  3. Freunde Script
    Von VanHellsehn im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 31.08.08, 13:12
  4. Apaches Freunde...
    Von Enumerator im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 24.04.08, 02:54
  5. Freunde System
    Von aargau im Forum PHP
    Antworten: 2
    Letzter Beitrag: 18.04.07, 19:29