2014-06-22 7 views
0

Привет ребята У меня есть пользователи таблицы:SQL Select с присоединиться

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `email` varchar(30) NOT NULL, 
    `username` varchar(30) NOT NULL, 
    `password` varchar(50) NOT NULL, 
    `firstname` varchar(20) NOT NULL, 
    `lastname` varchar(20) NOT NULL, 
    `birthdate` date DEFAULT NULL, 
    `role` varchar(10) NOT NULL, 
    `description` text, 
    `fotopath` varchar(50) DEFAULT NULL, 
    `city` varchar(20) NOT NULL, 
    `street` varchar(20) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

и стол private_message:

CREATE TABLE IF NOT EXISTS `private_message` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_from` int(11) NOT NULL, 
    `user_to` int(11) NOT NULL, 
    `reply_id` int(11) NOT NULL, 
    `message` varchar(400) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `readed` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_from` (`user_from`), 
    KEY `user_to` (`user_to`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE `private_message` 
    ADD CONSTRAINT `private_message_ibfk_1` FOREIGN KEY (`user_from`) REFERENCES `users` (`id`) ON DELETE CASCADE, 
    ADD CONSTRAINT `private_message_ibfk_2` FOREIGN KEY (`user_to`) REFERENCES `users` (`id`) ON DELETE CASCADE; 

Я хочу выбрать (user_from, user_to, сообщение, from_username, to_username, прочитанные, дата)
Я попытался это:

SELECT P.user_from,P.user_to,P.message,P.readed,P.date,U.username as from_username,D.username as to_username 
FROM private_message as P JOIN users as U ON(P.user_from=U.id) JOIN users as D ON(P.user_to=D.id) 
GROUP BY to_username,from_username 

и это дает мне

user_from|user_to|message|from_username|to_username|readed|date 
    1 | 2 | asdf | Admin  | Baski | 0 | 2014-06-22 12:00:16 
    2 | 1 | asdf | Baski  | Admin | 0 | 2014-06-22 12:02:16 
    3 | 1 | asdf | Smrdis | Admin | 0 | 2014-06-22 12:02:16 

мне нужна таблица, как это:

user_from|user_to|message|from_username|to_username|readed|date 
    2 | 1 | asdf | Baski  | Admin | 0 | 2014-06-22 12:02:16 
    3 | 1 | asdf | Smrdis | Admin | 0 | 2014-06-22 12:12:16 

Просто, когда я буду выбирать я только знаю, что мой user_id. Мне нужно выбрать все сообщения, присланные пользователю или отправленные пользователем, и группировать их по идентификатору второго лица (может быть отправителем или получателем). Я не могу просто сгруппировать его с помощью user_to или user_from, потому что вы можете отправлять сообщения и не получать ответ. Может ли кто-нибудь помочь мне с этим?

+0

Я не вижу ваш 'user_id' в обеих таблицах? –

ответ

0

вы можете просто добавить эту строку ГДЕ.

WHERE U.id = ... 
GROUP BY to_username,from_username 
+0

Я могу добавить «Where P.user_from = ID или P.user_to = ID», но я бы не группировал его должным образом, он бы группировал сообщения между каждым пользователем в 2 строки не 1, как я хочу, –

+0

вы сказали, что знаете только 'user_id' но у вас нет 'user_id', поэтому я догадался его идентификатор в вашей таблице пользователей –

+0

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

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