Php 如何显示基于好友的好友的推荐列表
我正在尝试执行一个mysql查询以显示推荐列表。按朋友接近程度排序的推荐列表。我能够根据朋友的推荐对列表进行排序,但是我在根据朋友的朋友对推荐列表进行排序时遇到了问题 以下是表格的设计:Php 如何显示基于好友的好友的推荐列表,php,mysql,Php,Mysql,我正在尝试执行一个mysql查询以显示推荐列表。按朋友接近程度排序的推荐列表。我能够根据朋友的推荐对列表进行排序,但是我在根据朋友的朋友对推荐列表进行排序时遇到了问题 以下是表格的设计: /*Table structure for table `recommendation` */ CREATE TABLE `recommendation` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `kategori` varchar(255) NOT
/*Table structure for table `recommendation` */
CREATE TABLE `recommendation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`kategori` varchar(255) NOT NULL,
`nama` varchar(255) NOT NULL,
`rating` set('1','2','3','4','5') NOT NULL,
`writer_id` varchar(255) NOT NULL,
`search_here` longtext NOT NULL,
`user_type` set('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `kategori` (`kategori`),
KEY `nama` (`nama`),
FULLTEXT KEY `search_here` (`search_here`)
)
ENGINE=MyISAM AUTO_INCREMENT=100174
DEFAULT CHARSET=latin1 COMMENT='recommendation table';
/*Table structure for table `user_relationship` */
DROP TABLE IF EXISTS `user_relationship`;
CREATE TABLE `user_relationship` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`me` varchar(255) NOT NULL,
`friend` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `me` (`me`)
)
ENGINE=MyISAM AUTO_INCREMENT=100982
DEFAULT CHARSET=latin1 COMMENT='user relationship table';
我应用以下查询:
SELECT
a.id AS ids,
a.writer_id,
a.kategori,
a.rating,
b.me,
a.user_type
FROM
recommendation a
LEFT OUTER JOIN
user_relationship b
ON
a.writer_id = b.friend
AND
b.me='$USER_ID'
WHERE
MATCH(search_here) AGAINST('$SEARCH' IN BOOLEAN MODE)
ORDER BY
b.me DESC,
a.writer_id
SELECT
a.id AS ids,
a.writer_id,
a.kategori,
a.nama,
a.rating,
b.me, b.friend,
c.friend2 AS ff, a.user_type
FROM recommendation a
LEFT OUTER JOIN webref.user_relationship b
ON a.oleh = b.friend AND b.me='1010147270'
LEFT OUTER JOIN webref.user_friend_friend c
ON a.oleh = c.friend AND b.friend IS NULL
WHERE MATCH(search_here) AGAINST('$SEARCH' IN BOOLEAN MODE)
GROUP BY a.id
ORDER BY
b.me DESC,
user_type DESC,
rating DESC,
c.friend DESC,
a.writer_id
推荐列表应按以下顺序显示:朋友推荐、朋友之友推荐和公众推荐
有人能帮我吗?谢谢
编辑: 我已尝试创建名为“user\u friend\u friend”的user\u关系表的克隆。 “user\u friend\u friend”表的设计如下:
CREATE TABLE `user_friend_friend` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`friend` varchar(255) NOT NULL,
`friend2` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `friend` (`friend`)
)
ENGINE=MyISAM AUTO_INCREMENT=100982
DEFAULT CHARSET=latin1 COMMENT='user friend friend table';
我有以下疑问:
SELECT
a.id AS ids,
a.writer_id,
a.kategori,
a.rating,
b.me,
a.user_type
FROM
recommendation a
LEFT OUTER JOIN
user_relationship b
ON
a.writer_id = b.friend
AND
b.me='$USER_ID'
WHERE
MATCH(search_here) AGAINST('$SEARCH' IN BOOLEAN MODE)
ORDER BY
b.me DESC,
a.writer_id
SELECT
a.id AS ids,
a.writer_id,
a.kategori,
a.nama,
a.rating,
b.me, b.friend,
c.friend2 AS ff, a.user_type
FROM recommendation a
LEFT OUTER JOIN webref.user_relationship b
ON a.oleh = b.friend AND b.me='1010147270'
LEFT OUTER JOIN webref.user_friend_friend c
ON a.oleh = c.friend AND b.friend IS NULL
WHERE MATCH(search_here) AGAINST('$SEARCH' IN BOOLEAN MODE)
GROUP BY a.id
ORDER BY
b.me DESC,
user_type DESC,
rating DESC,
c.friend DESC,
a.writer_id
有没有更有效的解决方案?一些性能提示:
-对于要加入的列,应该有一个索引。例如,writer_id似乎没有索引。
-即使使用索引,使用VARCHAR(256)作为要加入的列的类型也是很慢的。最好将ID存储为整数。您可以有一个单独的表来存储稍后查询的int->varchar映射
但是,要执行“朋友中的朋友”查询,类似这样的操作应该可以:
SELECT
a.id AS ids,
a.writer_id,
a.kategori,
a.rating,
b.me,
a.user_type
FROM
recommendation a
LEFT OUTER JOIN
user_relationship b
ON
a.writer_id = b.friend
AND
b.me='$USER_ID'
LEFT OUTER JOIN
user_relationship c
ON
a.writer_id = c.friend
AND
c.me = b.friend
如果你想在问题中添加更多内容,只需编辑你的问题,而不是添加额外的部分作为答案。hai andrey,谢谢你的回答。我试过这样的疑问。我可以通过检查“我”列的值来找到我朋友的推荐。但是,我怎样才能从朋友的朋友那里找到推荐信呢?谢谢。您希望将其更改为选择c.me而不是b.me