SELECT `invites`.`id`, `invites`.`from`, `invites`.`to`, `invites`.`group_id`
FROM `invites`
WHERE `invites`.`to` = '33'
获取被邀请的用户的邀请和ID的用户的ID。当然,他们互相邀请的小组的ID。我需要显示它们的用户名,但它们存储在另一个表中。团体也是如此。有关它们的信息存储在另一个表中。
我可以通过新的查询来获取ID中的信息,但值得吗?我只能用一个查询来完成吗?
修改
结构:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`surname` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
);
CREATE TABLE `invites` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`group_id` int(10) unsigned NOT NULL,
`from` int(10) unsigned NOT NULL,
`to` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `groups` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
答案 0 :(得分:3)
连接总是最糟糕的:
SELECT `invites`.`id`,
`invites`.`from`,
`invites`.`to`,
`invites`.`group_id`,
`toUsers`.`name` as toUserName,
`fromUsers`.`name` as fromUserName,
`groups`.`name` as groupName
FROM `invites`
INNER JOIN `users` AS toUsers
ON `invites`.`to` = toUsers.id
INNER JOIN `users` AS fromUsers
ON `invites`.`from` = fromUsers.id
INNER JOIN `groups`
ON `invites`.`group_id` = `groups`.`id`
WHERE `invites`.`to` = '33'
您唯一需要记住的是在[{1}},from
和to
上设置外键,并在表格中的group_id
上设置主键用户和组。然后您的查询将尽可能快。
所以我建议运行这个:
Id
查看一些文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
答案 1 :(得分:1)
您可以使用JOIN:
SELECT invites.id, invites.from, invites.to, invites.group_id, group.name, u1.name, u2.name
FROM invites, user as u1, user as u2, group
WHERE invites.from = u1.id
AND invites.to = u2.id
AND group.id = invites.group_id
AND invites.to = '33'
假设您的表名为user
和group
以及您的字段name
。您可能必须将反引号放回字段名称,因为FROM
是保留关键字。
答案 2 :(得分:1)
我也使用了加入,但我首先创建一个加入邀请给用户的视图,然后将其中的两个连接在一起 - 这意味着不必重复邀请和用户之间的连接。 / p>