2013-05-25 2 views
-2

Мой код выглядит это прямо сейчастолько начнут извлекать людей, которые не являются друзьями

<?php 
    $get_userinfo = mysql_query("SELECT * FROM users WHERE id != '$id'") or die(mysql_error()); 
    for ($i = 1; $i <= 6; $i++) { 
      $userinfo = mysql_fetch_assoc($get_userinfo); 
      $usertags = $userinfo['tags']; 
      $tagsdata = explode(" ", $usertags); 
      $interestsdata = explode(" ", $interests); 
      $result = array_intersect($interestsdata, $tagsdata); 

      echo '<li><img src="images/users/'.$userinfo['avatar'].'" /><a href="'.$userinfo['username'].'">'.$userinfo['name'].'</a><div class="add whotofollow'.$i.'" title="Not following/friends"></div></li>'; 
      } 
?> 

Так что в настоящее время выбирает все пользователи, которые не себя, а затем сравнивает их с вашими интересами в людях, так что только люди, которых вы действительно хотите отображаются обновления. Тогда это делает так, что только 6 из всех этих людей становятся видимыми, и это не проверяет так, что первое с большинством вещей в общих местах первое и такое.

Есть несколько вещей, которые я сам не знаю, как кодировать из этого.

Прежде всего, убедитесь, что показаны только люди, которых я не добавил в качестве друзей. Друзья хранятся в таблице под названием «друзья», содержащей строки «userid» и «userid2». Либо userid, либо userid2 может быть моим идентификатором, если мы друзья.

Во-вторых, мне нужно заказать их так, чтобы у меня было больше всего общего с местами, а также так, что показаны 6 лучших людей с большинством меня, а не 6 случайных.

Так что, в основном, как я могу сначала проверить, поэтому я не добавил их в качестве друзей? (таблица: друзья, строки: userid и userid2, либо id может быть моим идентификатором) Как выбрать лучших 6 человек с большинством общих вопросов со мной?

+0

Он уже сделал это: _Друзья хранятся в таблице под названием «друзья», содержащей строки «userid» и «userid2» ._ – kelunik

ответ

8

Чтобы выбрать только тех людей, которые не являются ни друзей:

SELECT * FROM users WHERE NOT EXISTS 
    (SELECT * 
    FROM friends 
    WHERE userid = users.id 
      OR userid2 = users.id) 

Для сравнения тегов и сравнивая их, я предпочел бы третью таблицу.

редактировать: что-то вроде

SELECT * FROM users 
    WHERE NOT EXISTS 
     (SELECT * FROM friends WHERE userid = users.id OR userid2 = users.id) 
    ORDER BY (SELECT COUNT(*) FROM tags AS t1 LEFT OUTER JOIN tags AS t2 ON t1.tagname = t2.tagname 
     WHERE t1.id = users.id) 
    LIMIT 6 
+0

О да, я забыл инструкцию 'EXISTS', как тупой я :( –

+0

Спасибо Это помогло, но я не хочу показывать это как ответ, потому что я до сих пор не знаю, как взять лучших 6 человек. – TheMeisterSE

+0

Попробуйте то, что я отредактировал. – kelunik

0

Похоже, у вас есть две таблицы: users и friends. Вы хотите соответствовать вашему friends, соответствующему вашему userid (я предполагаю, что это userid2 в friends?) И отображать информацию о пользователе из таблицы users.

ЗЕЬЕСТ ниже будет возвращать строки из таблицы пользователя, где userid в таблице пользователей соответствует userid в таблице друзей и userid2 поля равно ваш username. limit заявление будет показывать только первые 6 матчей

SELECT * FROM users 
JOIN friends ON users.userid == friends.userid WHERE friends.userid2 == '$id' 
LIMIT 6 

Это не рассматривает сортировку по большинству матчей друзей. Я оставлю это кому-то еще.

Смежные вопросы