2013-02-12 3 views
0

Я занимаюсь разработкой социальных website.I есть опция под названием alerts который показывает ожидающие запросы друзей и непрочитанные запрос messages.My следующий:Проблема в MySQL запрос Регистрация

SELECT 
    sk_friends.frndship_from_user_id, 
    sk_messages.msg_from_user_id, 
    sk_messages.msg_text, 
    sk_messages.msg_date 
FROM 
    sk_friends INNER JOIN sk_messages 
WHERE 
    sk_messages.msg_to_user_id = '$user_id' 
    AND sk_friends.frndship_to_user_id ='$user_id' 
    AND sk_friends.frndship_status = 'pending' 
    AND sk_messages.msg_status='unread' 
ORDER BY 
    sk_friends.fndship_date ASC, 
    sk_messages.msg_date ASC; 
  • sk_friends и ak_messages столы.
  • msg_from_user_id является идентификатор отправителя
  • frndship_from_user_id является идентификатор пользователя, который отправляет запрос
  • $ user_id является идентификатор пользователя для входа

Каждая строка данных в два раза появляются. Я не знаю, почему это происходит.

+0

Можете ли вы сделать небольшой [скрипку] (http://sqlfiddle.com) и объяснить? –

+4

вы пропустили инструкцию ON в запросе соединения. проверьте http://dev.mysql.com/doc/refman/5.0/en/join.html, чтобы применить внутреннее соединение. – ripa

+0

Используйте «ON» вместо «WHERE» в сегменте JOIN вашего запроса. – illuzive

ответ

4

В вашем внутреннем соединении нет предложения ON. Попробуйте добавить один, который должен удалить двойные результаты.

0

Попробуйте это:

SELECT 
    sf.frndship_from_user_id, 
    sm.msg_from_user_id, 
    sm.msg_text,sm.msg_date 
FROM 
    sk_friends sf , 
    sk_messages sm 
WHERE 
    sm.msg_to_user_id = sf.frndship_to_user_id AND 
    sm.msg_to_user_id = '$user_id' AND  
    sf.frndship_status = 'pending' AND 
    sm.msg_status='unread' 
ORDER BY 
    sf.fndship_date ASC,sm.msg_date ASC; 
Смежные вопросы