Zurück tutorials.de > Home

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum
 
 
tutorials.de Buch-Verschenkaktion

Einzelnen Beitrag anzeigen
 
Alt 26.02.07, 23:01   #8 (permalink)
 
Benutzerbild von Thomas Darimont tutorials.de Administrator 
 
Registriert seit: Jun 2002
Ort: Saarbrücken (Saarland)
Beiträge: 9.155
Renommee-Modifikator: 60
Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft Thomas Darimont hat eine strahlende Zukunft

AW: Wer kennt wen über wen? Pfade in einem Graph auflisten

Hallo,

hier mal ein kleines Beispiel zum Aufbau eines Bekanntheitsgraphen in Oracle 10g mithilfe der neuen hierarchischen Abfragemöglichkeiten
in Oracle 10g -> http://www.oracle.com/technology/ora...ectby_10g.html

Unsere User Tabelle:
sql Code:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
CREATE TABLE t_user (id number NOT NULL, name varchar2(45) NOT NULL, PRIMARY KEY  (id));
INSERT INTO t_user VALUES (1,'Tom');
INSERT INTO t_user VALUES (2,'Fritz');
INSERT INTO t_user VALUES (3,'Hans');
INSERT INTO t_user VALUES (4,'Anne');
INSERT INTO t_user VALUES (5,'Paula');

Unsere Friends Tabelle:
sql Code:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
CREATE TABLE t_friend (id number NOT NULL , userid number NOT NULL, friendid number NOT NULL, PRIMARY KEY  (id));
INSERT INTO t_friend VALUES(1,1,2);
INSERT INTO t_friend VALUES(2,1,4);
INSERT INTO t_friend VALUES(3,2,1);
INSERT INTO t_friend VALUES(4,2,3);
INSERT INTO t_friend VALUES(5,2,4);
INSERT INTO t_friend VALUES(6,3,2);
INSERT INTO t_friend VALUES(7,4,1);
INSERT INTO t_friend VALUES(8,4,5);
INSERT INTO t_friend VALUES(9,5,4);

Unsere User Tabelle:
sql Code:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
SQL> SELECT * FROM t_user;
 
        ID NAME
---------- ---------------------------------------------
         1 Tom
         2 Fritz
         3 Hans
         4 Anne
         5 Paula

Unsere User Tabelle:

Unsere Friend Tabelle:
sql Code:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
SQL> SELECT * FROM t_friend;
 
        ID     USERID   FRIENDID
---------- ---------- ----------
         1          1          2
         2          1          4
         3          2          1
         4          2          3
         5          2          4
         6          3          2
         7          4          1
         8          4          5
         9          5          4
 
9 rows selected.

Damit haben wir einen Bekanntheitsgraphen definiert wie man ihn in der Grafik im Anhang sehen kann.

Möchten wir nun wissen über welche Verbindung User 3 den user 5 kennt so können wir folgende Abfrage benutzen:
sql Code:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
SELECT socialnetwork.path
FROM
(SELECT
f.* ,
 3 || SYS_CONNECT_BY_PATH(f.friendid,'-') path
FROM
t_friend f
connect BY nocycle prior f.friendid = f.userid
start WITH f.userid = 3) socialnetwork
WHERE friendid = 5
ORDER BY length(socialnetwork.path)

Als Ergebnis erhalten wir:
Code:
SQL> select socialnetwork.path
  2  from
  3  (select
  4  f.* ,
  5   3 || SYS_CONNECT_BY_PATH(f.friendid,'-') path
  6  from
  7  t_friend f
  8  connect by nocycle prior f.friendid = f.userid
  9  start with f.userid = 3) socialnetwork
 10  where friendid = 5
 11  order by length(socialnetwork.path)
 12  /

PATH
---------------------------------------------------
3-2-4-5
3-2-1-4-5
Das bedeutet, dass der User 3 den User 5 über zwei verschiedene Verbindungen kennt:

1) 3-2-4-5
2) 3-2-1-4-5

Auf ähnliche Weise funktionieren auch die Beziehungsgraphen in den großen Networking Communities
wie Beispielsweise Xing/OpenBC, facebook, studivz und myspace.

Gruß Tom
Miniaturansicht angehängter Grafiken
[Oracle] Wer kennt wen über wen? Pfade in einem Graph auflisten-sngraph.jpg  
__________________
Java rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
  Thomas Darimont ist offline  
 
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 101
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 224
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 114
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 83
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 163
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 75,00%
60 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 25,00%
20 Stimmen
Stimmen gesamt: 80
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,34165 Sekunden mit 25 queries