Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Verbindungen suchen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Verbindungen suchen


 
MaxP0W3R
03-12-2007, 08:39 
 
Hi,

es gibt eine Tabelle mit den spalten ids1, ids2

Diese symbolisieren die Verbindung zwischen 2 Personen.

Beispieltabelle

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:
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

 
H2O
03-12-2007, 10:31 
 
Versuchs mal so: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
)
)

 
MaxP0W3R
03-12-2007, 14:11 
 
hi,

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

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

 
H2O
03-12-2007, 15:51 
 
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.: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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:11 Uhr.