我基本上试图将用户信息与我的消息表连接起来。我基本上想获取来自给定用户的已发送给他们或他们已发送的所有消息。我的消息表如下所示:
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`toId` int(11) NOT NULL,
`fromId` int(11) NOT NULL,
`msg` text NOT NULL,
`createdOn` varchar(100) NOT NULL,
`status` enum('new','unread','read','archived','deleted') NOT NULL DEFAULT 'new',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=31;
用户表如下所示:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`pid` int(11) NOT NULL,
`gender` enum('male','female') NOT NULL,
`fname` varchar(25) NOT NULL,
`lname` varchar(25) NOT NULL,
`address` varchar(50) NOT NULL,
`city` varchar(25) NOT NULL,
`state` varchar(2) NOT NULL,
`zip` int(5) NOT NULL,
`email` varchar(100) NOT NULL,
`username` varchar(50) NOT NULL,
`about` text NOT NULL,
`createdOn` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;
我尝试过以下查询:
$messages = "SELECT * FROM ( SELECT messages.*, users.pid, users.username FROM messages, users WHERE messages.fromId = users.id AND messages.toId = '". $_COOKIE['id'] ."' ORDER BY messages.createdOn DESC ) as messages GROUP BY fromId";
$messages = "SELECT messages.toId, messages.fromId, messages.msg, messages.createdOn, users.pid, users.username FROM messages, users WHERE ( messages.toId = ". $_COOKIE['id'] ." OR messages.fromId = ". $_COOKIE['id'] ." ) AND messages.fromId = users.id GROUP BY messages.fromId ORDER BY messages.createdOn DESC";
$messages = "SELECT messages.* FROM messages JOIN ( SELECT messages.fromId, max(messages.createdOn) as date_creation FROM messages WHERE messages.toId = 1 GROUP BY messages.fromId ) users ON messages.fromId = users.id";
问题是这些返回错误的来自
用户。如果登录用户撰写了该消息,我想知道该消息发送给了谁;反之亦然,如果该消息发送给了给定用户,则该消息发送给了谁。
这可以在一个查询中完成吗?还是我必须对发送和接收的消息进行单独的查询?
最佳答案
我认为您可以明智地使用 case
语句来获得您想要的结果:
select id, (case when $_COOKIE['id'] = fromid then toId else FromId end) as OtherId,
(case when $_COOKIE['id'] = fromid then 'sent' else 'received' end) as which,
msg, createdOn, status
from messages m
where $_COOKIE['id'] in (fromId, toId) ;
关于mysql - 将用户信息与消息表连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420629/