2013-12-11 5 views
-1

Я действительно борется с этим, надеюсь, кто-то может помочь. У меня есть таблица, например, так:MYSQL: вывести результаты из таблицы, но не повторять повторяющиеся результаты?

id | msg_id | to_user_id | from_user_id | subject | content 
1  1   6    10   hi  hello 
2  1   6    10   hi  hello 
3  1   10   6   hi  hello 
4  2   4    1   hi 
5  3   1    4   hi 

я хотел бы повторить из результатов этой таблицы с ниже запроса с использованием MySQL. На данный момент я получаю все результаты, эхо, отлично, но я не хочу повторять повторяющиеся результаты. В этом случае число «1» появляется в столбце «msg_id» четыре раза. Я хочу использовать DISTINCT COUNT или что-то подобное, чтобы выбрать все строки из «msg_id», но не повторять дубликаты и только считать «1» один раз.

вот мой MySQL заявление:

function get_inbox2() { 
       global $connection; 
       global $_SESSION; 
       $query = "SELECT * 
          FROM ptb_messages m, ptb_profiles p 
          WHERE m.to_user_id =".$_SESSION['user_id']." 
          AND m.to_user_deleted !='".$_SESSION['user_id']."' 
          AND m.from_user_deleted !='".$_SESSION['user_id']."' 
          AND m.from_user_id != '0' 
          AND p.user_id = m.from_user_id 
          ORDER BY m.date_sent DESC"; 


          $inbox_set2 = mysql_query($query, $connection); 
       confirm_query($inbox_set2); 
       return $inbox_set2; 
      } 

Я пытался что-то вроде этого, но он не показывает результаты:

$query = "SELECT COUNT(DISTINCT msg_id) totalCOUNT FROM ptb_messages WHERE to_user_id=".$_SESSION['user_id'].""; 
+1

@Nic: пространство для чего? Это правильное заявление – zerkms

+0

@Nic. Это был просто псевдоним. он может и должен иметь это без пробелов. –

+0

oops, вы правы, мой плохой ... я удалил комментарий –

ответ

0

Попробуйте получить только MSG_ID с MAX (ID) (вы можете получить MIN с той же логикой) для каждого идентификатора:

SELECT m.*,p.* 
FROM ptb_messages m 
INNER JOIN ptb_profiles p ON p.user_id = m.from_user_id 
INNER JOIN (
    SELECT MAX(id) AS id,msg_id 
    FROM messages 
    GROUP BY msg_id 
) a ON a.id = m.id 
WHERE m.to_user_id = ".$_SESSION['user_id']." 
    AND m.to_user_deleted != '".$_SESSION[' user_id ']."' 
    AND m.from_user_deleted != '".$_SESSION[' user_id ']."' 
    AND m.from_user_id != '0' 
ORDER BY m.date_sent DESC 
+0

спасибо, я попробовал это, но он дает мне синтаксическую ошибку – user3080996

+0

@ user3080996. Где и какова ошибка? –

+0

Ошибка базы данных: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «p.user_id = m.from_user_id INNER JOIN (SELECT MAX (id), msg_id FROM messages» в строке 3 – user3080996

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