我的网站上有一种 Facebook 式的喜欢/不喜欢系统,并且正在使用以下查询来获取特定帖子的喜欢和不喜欢:
SELECT DISTINCT * FROM posts WHERE cid='$cid' AND pid=".implode(" OR pid=",$pids)." ORDER BY time DESC
$pid
是要搜索的帖子 ID 数组。
zbid
是当前正在访问该页面的用户的 id。现在,如果该用户对帖子进行了评分(喜欢/不喜欢),则应首先返回他的结果,然后按 . 对结果进行排序time DESC
。
我将如何修改查询来做到这一点?
如果posts
表有以下数据:
+----+-----+------+-----+--------+------+ | 编号 | 西德 | 出价 | 进程号 | 评级 | 时间 | +----+-----+------+-----+--------+------+ | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+ | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | 3 | 1 | 3 | 2 | 1 | 2 | +----+-----+------+-----+--------+------+ | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+
当前的 select 语句(上)将返回以下信息(带$pid = array(1);
):
+----+-----+------+-----+--------+------+ | 编号 | 西德 | 出价 | 进程号 | 评级 | 时间 | +----+-----+------+-----+--------+------+ | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+ | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+
但是,如果该人zbid=4
正在访问该页面,它应该将该结果(如果存在)提升到顶部,如下所示:
+----+-----+------+-----+--------+------+ | 编号 | 西德 | 出价 | 进程号 | 评级 | 时间 | +----+-----+------+-----+--------+------+ | 4 | 2 | 4 | 1 | -1 | 3 | +----+-----+------+-----+--------+------+ | 5 | 1 | 5 | 1 | 1 | 8 | +----+-----+------+-----+--------+------+ | 6 | 1 | 6 | 1 | -1 | 7 | +----+-----+------+-----+--------+------+ | 2 | 1 | 2 | 1 | -1 | 4 | +----+-----+------+-----+--------+------+ | 1 | 1 | 1 | 1 | 1 | 1 | +----+-----+------+-----+--------+------+
该变量$zbid
设置为zbid
正在访问页面的用户。