2010-11-07 8 views
0

Я хочу, чтобы пользователи могли только отправлять их друзьям. Сейчас у меня есть это:SQL: Показывать только друзей

$qur = mysql_query(" 
SELECT users.id, users.firstname, users.lastname, 
(users.firstname = '$firstname' AND users.lastname = '$lastname') AS full FROM users 
WHERE 
(users.firstname = '$firstname' AND users.lastname='$lastname') 
OR (users.firstname LIKE '$firstname%' AND users.lastname LIKE '$lastname%') 
OR users.firstname LIKE '$firstname%' OR users.lastname LIKE '$firstname%' 
ORDER BY (users.firstname = '$firstname' AND users.lastname='$lastname') DESC") or die(mysql_error()); 

Это показывает всем, у пользователей, которые, как $ FirstName, $ LastName

Теперь я попытался сделать только выбрать весовые друг $ FirstName, $ LastName, путем добавления этого:

INNER JOIN users_friends ON users.id=users_friends.uID 
WHERE users_friends.bID='$USER' AND users_friends.type = '$typeUsers' AND 

Так он получил так:

$qur = mysql_query(" 
SELECT users.id, users.firstname, users.lastname, 
(users.firstname = '$firstname' AND users.lastname = '$lastname') AS full FROM users 
    INNER JOIN users_friends ON users.id=users_friends.uID 
WHERE users_friends.bID='$USER' AND users_friends.type = '$typeUsers' AND 
(users.firstname = '$firstname' AND users.lastname='$lastname') 
OR (users.firstname LIKE '$firstname%' AND users.lastname LIKE '$lastname%') 
OR users.firstname LIKE '$firstname%' OR users.lastname LIKE '$firstname%' 
ORDER BY (users.firstname = '$firstname' AND users.lastname='$lastname') DESC") or die(mysql_error()); 

Если существует всего 4 с LastName «лисицы», и я только друзья с 1 из них с FirstName «Меган», он выплевывает это:

Megan Fox 
Megan Fox 
Mami Fox 
Mimi Fox 
Mumu Fox 

Как вы можете видеть здесь, он выплевывает «Меган Фокс (с кем я дружу) "дважды. И я думаю, это потому, что где-то в SQL он выплевывает всех, И ТОГДА он выплевывает друга. Но как я не могу выплюнуть всех, но только моего друга?

ответ

2

Это потому, что приоритет оператора. Выражение x and y or z не оценивается как x and (y or z), а как (x and y) or z. поэтому ограничение друга применяется только к первому способу сопоставления имен.

Вам нужны круглые скобки вокруг условий имени:

WHERE users_friends.bID='$USER' AND users_friends.type = '$typeUsers' AND (
(users.firstname = '$firstname' AND users.lastname='$lastname') OR 
(users.firstname LIKE '$firstname%' AND users.lastname LIKE '$lastname%') OR 
users.firstname LIKE '$firstname%' OR 
users.lastname LIKE '$firstname%' 
) 

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

+0

Благодарим за объяснение! – Johnson

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