Verbindungen suchen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verbindungen suchen

    Hi,

    es gibt eine Tabelle mit den spalten ids1, ids2

    Diese symbolisieren die Verbindung zwischen 2 Personen.

    Beispieltabelle
    Code:
    ids1    ids2
     1         2
     1         3
     4         1
     4         2
    Jetzt geht es darum, die gemeinsamen Freunde von z.B. 1 und 4 zu finden (das wäre dann hier nur die 2)

    Mein bisheriger Lösungsansatz:
    Alle Datensätze mit ids von Person 1, dann alle Datensätze von Person 2 und die dann verbinden, aber dadurch, dass halt die jeweiligen is an 1. oder 2. STelle stehen können, wirds schwierrig und so ist am Ende jeder mit jedem verbunden, obwohl das nicht stimmt.

    hier mal der Query:
    Code:
    String query = "SELECT * FROM verbindungen v1 
    WHERE ids1 = '"+ids+"' || ids2 = '"+ids+"'"
    + " 
    && EXISTS (SELECT * FROM verbindungen v2 
    WHERE (v1.ids1 = v2.ids1 && v1.ids1 NOT LIKE '"+ids+"' && v2.ids2 = '"+friend_ids+"') 
    || (v1.ids1 = v2.ids2 && v1.ids1 NOT LIKE '"+ids+"' && v2.ids1 = '"+friend_ids+"') 
    || (v1.ids2 = v2.ids1 && v1.ids2 NOT LIKE '"+ids+"' && v2.ids2 = '"+friend_ids+"') 
    || (v1.ids2 = v2.ids2 && v1.ids2 NOT LIKE '"+ids+"' && v2.ids1 = '"+friend_ids+"') )";
    Hat hier jmd. eine Idee ?

    Oder kann man z.B. in einer query spaltenwerte vertauschen ? so dass wenn nach einem datensatz gesucht wird der in s1 oder s2 sein kann, der immer in s1 als ausgabe geschrieben wird ?


    Das ganze is für ein kleines akademisches Projekt, es wurde ein freundesnetzwerk (mit offizieller erlaubnis) ausgelesen und alles in eine Mysql 5.0.24 db geschrieben


    vielen dank

    cya max


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

  • #2
    Versuchs mal so:
    Code:
    SELECT
    	ids1,
    	ids2
    FROM
    	verbindungen v1
    WHERE
    	(ids1 = $ids
    	AND EXISTS(
    		SELECT
    			ids1
    		FROM verbindungen v2
    		WHERE ids1 = $friend_ids
    		    AND v1.ids2 = v2.ids2
    		)
    	)
    OR
    	(ids2 = $ids
    	AND EXISTS(
    		SELECT
    			ids1
    		FROM verbindungen v2
    		WHERE ids2 = $friend_ids
    		    AND v1.ids1 = v2.ids1
    		)
    	)
    Gruss
    H2O

    Kommentar


    • #3
      hi,

      funktioniert leider nicht, ich krieg x-mal die ids, die ich übergeben, als ausgabe...

      bin langsam am verzweifeln, so schwer isses eigentlich nicht -.-


      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

      Kommentar


      • #4
        Original geschrieben von MaxP0W3R
        funktioniert leider nicht, ich krieg x-mal die ids, die ich übergeben, als ausgabe...
        Kannst du das noch auf deutsch übersetzen?

        Hier mal das Bsp.:
        Code:
        mysql> select var1, var2 from tab1;
        +------+------+
        | var1 | var2 |
        +------+------+
        |    1 |    2 | 
        |    1 |    3 | 
        |    4 |    1 | 
        |    4 |    2 | 
        |    5 |    6 | 
        |    7 |    8 | 
        |    8 |    1 | 
        |    8 |    4 | 
        +------+------+
        8 rows in set (0.00 sec)
        
        mysql> select var1, var2 from tab1 t1
            -> where (var1 = 1 
            -> and exists(select var1 from tab1 t2 where var1 = 4 and t1.var2 = t2.var2))
            -> OR (var2 = 1 
            -> and exists(select var1 from tab1 t3 where var2 = 4 and t1.var1 = t3.var1));
        +------+------+
        | var1 | var2 |
        +------+------+
        |    1 |    2 | 
        |    8 |    1 | 
        +------+------+
        2 rows in set (0.00 sec)
        also genau das, was du willst.
        Gruss
        H2O

        Kommentar

        Lädt...
        X