【问题标题】:PHP and SQL Social OperationsPHP 和 SQL 社交运营
【发布时间】:2010-09-23 14:15:06
【问题描述】:

我已经使用这个查询创建了一个表。

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_id1friend_id2 中存储的数值强>行。我的问题是我不知道 friend_id1friend_id2 是否包含所需的数据。

如果我的号码是$_SESSION['id'],请帮我创建一个查询以接收其他用户的号码

【问题讨论】:

  • friend_id1 和friend_id2 代表什么(确切地说)?因为我不明白谁是谁。
  • @fabrik - 这也是他的问题。
  • friend_id1 应该代表邀请友谊的人,而friend_id2 代表接受或拒绝友谊的人。我的问题是如果可以提供和接受友谊,如何知道其他用户的 id,而我的 id 可以简单地是friend_id1或friend_id2

标签: php sql social-networking


【解决方案1】:
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']);

【讨论】:

  • 您需要在 OR 条件周围加上括号。现在它说“所有 id2=$id 的记录”和“只有这些 id1=$id 的记录,如果状态不为零”。
  • 你能澄清一下你在说什么吗,很难理解你的意思。
【解决方案2】:

我不确定您的确切意思,但我认为您正在寻找类似的东西:

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

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

【讨论】:

  • +1 用于读心能力(或者我是唯一不理解 OP 问题的人?:o)
  • fabrik,这真是一个值得思考的问题。即使我不完全理解如何在我的网络应用程序中实现它。
【解决方案3】:

类似:

 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 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2019-04-03
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多