Php 好友列表数据库的简单设计

Php 好友列表数据库的简单设计,php,mysql,Php,Mysql,我有一个关于建立友谊系统数据库的小问题。 现在我有一张桌子叫friends 比如说: 桌友: you friend approve since _________________________________________________ wetube youtube 1 4-12-2012 facebook wetube 1 4-12-2012 我有这个查询代码来获取用户we

我有一个关于建立友谊系统数据库的小问题。 现在我有一张桌子叫friends 比如说:

桌友:

    you      friend      approve     since
_________________________________________________
   wetube    youtube     1           4-12-2012
   facebook  wetube      1           4-12-2012
我有这个查询代码来获取用户wetube的朋友

mysql_query("SELECT f.* FROM friends f inner join users u on u.username =
f.you WHERE f.friend = 'wetube' UNION ALL SELECT f.* FROM friends f inner join users u on
u.username = f.friend WHERE f.you = 'wetube'");
现在我想知道的是如何把维图伯的薯条拿来,并在他的页面上展示给他看

固定的:

最后我解决了这个问题。 这是一张表:

CREATE TABLE IF NOT EXISTS `friends` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `you` varchar(255) NOT NULL,
  `friend` varchar(255) NOT NULL,
  `type` varchar(255) NOT NULL,
  `since` date NOT NULL,
  `message` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
这是获取用户朋友的php代码

<?php
$username = $_SESSION['username'];
$friends_sql = mysql_query("SELECT * FROM friends WHERE (friend = '$username' OR you = '$username') ");
while($friends_row = mysql_fetch_assoc($friends_sql)){
if ($username == $friends_row['you']) {
echo $friends_row['friend']."<br/>";
} elseif($username == $friends_row['friend']) {
echo $friends_row['you']."<br/>";
}
}
?>

你自己试试吧,它100%有效。

你的意思是只在[friend]列中有wetube的行?您可能只是过度考虑了连接:

$result = mysql_query("SELECT * FROM friends WHERE friend='wetube'");
$row = mysql_fetch_array($result);

echo $row['friend'], ' - ', $row['since'];
SELECT * FROM [friends] WHERE [friend] = 'wetube'
如果您想知道wetube在任一列中的位置:

SELECT * FROM [friends] WHERE [friend] = 'wetube' OR [you] = 'wetube'
或:


您的意思是只在[friend]列中包含wetube的行?您可能只是过度考虑了连接:

SELECT * FROM [friends] WHERE [friend] = 'wetube'
如果您想知道wetube在任一列中的位置:

SELECT * FROM [friends] WHERE [friend] = 'wetube' OR [you] = 'wetube'
或:


wetube的所有朋友都是:

SELECT * FROM friends WHERE (friend = 'wetube' OR you = 'wetube') AND approve = 1
我建议删除approve列,而是保留一个请求表。这意味着所有已批准的请求都在friends表中,所有待定的批准都在friend_请求或任何表中


这种双表设计效率更高,因为当您想要显示朋友时,您不必总是检查approve=1,这可能非常常见。

wetube的所有朋友都是:

SELECT * FROM friends WHERE (friend = 'wetube' OR you = 'wetube') AND approve = 1
我建议删除approve列,而是保留一个请求表。这意味着所有已批准的请求都在friends表中,所有待定的批准都在friend_请求或任何表中


这两个表的设计更有效,因为当您想向朋友展示时,您不必总是检查approve=1,这可能是非常常见的情况。

可能不完全理解这一点

从朋友f中选择* 其中f.you='wetube'或f.friend='wetube'

猜猜你在寻找用户信息,以及内部连接的原因

可能会删除“批准”列,并有2条记录。第二条记录是当朋友批准成为朋友时。 然后你就可以很容易地看到你是谁的朋友,他们反过来也是你的朋友

wetube --> youtube
facebook --> youtube
youtube --> wetube  wetube would approve a friendship request for youtube, adding a record
wetube --> facebook
然后你就可以很容易地问谁是wetube的朋友了。
只是一个想法,可能不是你想要的答案。

可能没有完全理解这一点

从朋友f中选择* 其中f.you='wetube'或f.friend='wetube'

猜猜你在寻找用户信息,以及内部连接的原因

可能会删除“批准”列,并有2条记录。第二条记录是当朋友批准成为朋友时。 然后你就可以很容易地看到你是谁的朋友,他们反过来也是你的朋友

wetube --> youtube
facebook --> youtube
youtube --> wetube  wetube would approve a friendship request for youtube, adding a record
wetube --> facebook
然后你就可以很容易地问谁是wetube的朋友了。
这只是一个想法,可能不是你想要的答案。

不是你问题的直接答案,但一个完全规范化的数据库将有两个用于此系统的表

由于这是一种多对多关系,我会这样做:

UsersTable
------------------
id: int, serial
name: varchar
email: varchar
...


有了一个正确设计和规范化的数据库,管理和创建查询将更加容易。

这不是对您的问题的直接回答,但一个完全规范化的数据库将有两个用于此系统的表

由于这是一种多对多关系,我会这样做:

UsersTable
------------------
id: int, serial
name: varchar
email: varchar
...


有一个设计合理、标准化的数据库,管理和创建查询将更加容易。

那么我将如何显示记录?我将如何在页面上显示记录或朋友记录?然后我将如何显示记录?我将如何在页面上显示记录或朋友记录?@Mustafa M Jalal:$result=mysql_queryselect*来自friends where friend='wetube'和您='facebook';那也不行。多想想。我希望facebook是wetube的朋友,wetube是facebook的朋友,所以如果facebook加载他的页面,他会看到wetube他的朋友,同样,wetube他也会看到facebook他的朋友,你打算如何将你的朋友带到页面?链接或登录?将wetube的朋友带到他的页面上,也将facebook的朋友带到他的页面上page@MustafaM Jalal:$result=mysql_queryselect*从朋友那里,朋友='wetube'和你='facebook';那也不行。多想想。我希望facebook是wetube的朋友,wetube是facebook的朋友,所以如果facebook加载他的页面,他会看到wetube他的朋友,同样,wetube他也会看到facebook他的朋友,你打算如何将你的朋友带到页面?链接或登录?将wetube的朋友带到他的页面上,也将facebook的朋友带到他的页面上。你刚刚做对了,但我将如何显示记录?假设我在wetube页面,我应该显示[你]还是[朋友]??我不知道啊,我明白你的意思。你想:如果friend='wetube',那么你其他人friend End是这样的,但我想还有另一种方法可以做到这一点,你刚刚做对了,但是我如何显示记录,比如说我在wetubes页面,我应该显示[你]哪一列
他是[朋友]??我不知道啊,我明白你的意思。你想要:如果friend='wetube',那么你其他人friend ENDyes有点像这样,但我想还有另一种方法,伙计们,我对查询没有问题,我只对mysql有问题。\u fetch\u assoc我如何显示记录???请问我应该使用哪个字段我对查询没有问题我只对mysql有问题\u fetch\u assoc我将如何显示记录???我应该使用哪个字段