我有一个使用此查询创建的表。
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']
,请帮我创建一个查询以接收其他用户的号码答案 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
如果你这样做,友情发生时的控制数据可能需要转移到另一个表