mysql - avoid duplicate values in php -
i have created "people may know" script in php. script shows me friends of friends, in php friend system. have table called users (user_id, name, surname, email, profile) thats holds information users. table called friends(friend_id, user_one, user_two) holds id of users friends. code following:
<?php // ------ gives me friends $friend_query = mysql_query(" select `user_one`, `user_two` `friends` `user_one`='$session_user_id' or `user_two`='$session_user_id' "); while($run_friend = mysql_fetch_array($friend_query)){ $user_one = $run_friend['user_one']; $user_two = $run_friend['user_two']; if($user_one == $session_user_id){ $user = $user_two; } else { $user = $user_one; } $friend_id = getuser($user, 'user_id'); // ----- gives me friends of friends $friend_query_two = mysql_query(" select `user_one`, `user_two` `friends` (`user_one`='$friend_id' , `user_two` != '$session_user_id') or (`user_one`!='$session_user_id' , `user_two`='$friend_id' ) "); while($run_friend_two = mysql_fetch_array($friend_query_two)){ $user_one_two = $run_friend_two['user_one']; $user_two_two = $run_friend_two['user_two']; if($user_one_two == $friend_id){ $user_two = $user_two_two; } else { $user_two = $user_one_two; } $friend_id_two = getuser($user_two, 'user_id'); // ------- gives me friends of friends friends $check_friend_query = mysql_query(" select friends_id friends (user_one='$session_user_id' , user_two='$friend_id_two') or (user_one='$friend_id_two' , user_two='$session_user_id') "); if (mysql_num_rows($check_friend_query) != 1){ //here problem duplicate values friends of friends $my_friend = $friend_id_two; $friends_friends = mysql_query("select `user_id`, `name`, `surname`, `email`, `profile` `users` (`user_id`='$my_friend') "); while ($run_friends= mysql_fetch_assoc($friends_friends)) { $friend_user_id = $run_friends['user_id']; } ?> my code works fine , gives me friends of friends. problem duplicate values. idea how avoid this?
updated
a php implementation might this:
global $db; $db = new pdo('mysql:host=localhost;dbname=<somedb>', '<username>', 'password'); $friends = getfriendsof( $session_user_id ); $friends_of_friends = getfriendsof( $friends ); // whatever want right here // friends ($friends) // , friends' friends ($friends_of_friends) function getfriendsof( $user ) { global $db; if ( is_array( $user ) ) $where = ' in (' . implode( ',', $user ) . ')'; else $where = ' = ' . $user; $sql = " select group_concat( f.user_id ) friends (select user_one user_id friends user_two {$where} union distinct select user_two friends user_one {$where} ) f"; $results = $db->query( $sql ); $row = $results->fetch(); return explode( ',', $row[ 'friends' ] ); } original
don't have data test with. should trick.
get friends:
select u.* (select user_one user_id friends user_two = '$session_user_id' union distinct select user_two friends user_one = '$session_user_id' ) f join users u on u.user_id = f.user_id get friends of friends:
select u.* (select distinct user_one user_id friends user_two in (select user_one user_id friends user_two = '$session_user_id' union distinct select user_two friends user_one = '$session_user_id' ) union distinct select distinct user_two friends user_one in (select user_one user_id friends user_two = '$session_user_id' union distinct select user_two friends user_one = '$session_user_id' ) ) f join users u on u.user_id = f.user_id
Comments
Post a Comment