PHP和SQL社交操作

时间:2010-09-23 14:15:07

标签: php sql social-networking

我有一个使用此查询创建的表。

CREATE TABLE `tbl_friends` (
  `friend_id` int(11) NOT NULL auto_increment,
  `friend_status` tinyint(4) NOT NULL default '0',
  `friend_id1` int(11) NOT NULL default '0',
  `friend_id2` int(11) NOT NULL default '0',
  `friend_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `friend_confirm` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`friend_id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

我想查看我的朋友列表,因为我只需要知道其他用户的 id - 存储在 friend_id1 friend_id2 行。我的问题是,我不知道 friend_id1 friend_id2 是否包含所需数据。

如果我的号码 $ _ SESSION ['id']

,请帮我创建一个查询以接收其他用户的号码

3 个答案:

答案 0 :(得分:2)

我不确定你究竟是什么意思,但我认为你正在寻找类似的东西:

select distinct * from tbl_friends where friend_id1 = $_SESSION["id"] OR friend_id2 = $_SESSION["id"];

如果这不是您的意思,请添加一些其他信息。

答案 1 :(得分:2)

CREATE TABLE `tbl_friends` (
  `friend_id` int(11) NOT NULL auto_increment,
  `friend_status` tinyint(4) NOT NULL default '0',
  `friend_id1` int(11) NOT NULL default '0',
  `friend_id2` int(11) NOT NULL default '0',
  `friend_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `friend_confirm` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`friend_id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

会是这样的:

SELECT * FROM tbl_friends WHERE friend_id2 = %d OR friend_id1 = %d AND friend_status != 0 ORDER BY friend_id

更多视觉示例:

SELECT
    *
FROM
    tbl_friends
    WHERE
        friend_id2 = %$1d
    OR
        friend_id1 = %$1d
    AND
        friend_status != 0
    ORDER BY
        friend_id
    DESC

然后运行它就抛出一个sprintf函数并准备就绪。

$sql = sprintf($sql,$_SESSION['id']);

答案 2 :(得分:1)

类似的东西:

 Select distinct(id) from (
      select friend_id1 as id from friends where friend_id2 = :my_id
      union
      select friend_id2 as id from friends where friend_id1 = :my_id
 )

这里真正的问题是保持表格不会出现奇怪的数据。对于每个互惠关系,总是将两条记录放入表中会更好。那你只需要说:

select * from friends where friend_id1 = :my_id and status = :whatever 

如果你这样做,友情发生时的控制数据可能需要转移到另一个表