下面的查询选择物品上的"loves"。(把它想象成类似于facebooks的"like"系统。
此选择中有两个表正在使用。一个链接表(包含itemid、userid、lovetime),它被连接到一个users表,以便检索用户名/用户配置文件url等。
$lovequery = "select love.lovetime, love.userid as ID, love_users.display_name, love_users.user_url
from ".$wpdb->prefix."comment_loves love
left join ".$wpdb->prefix."users love_users on love_users.ID=love.userid
where commentid = $itemid
order by love.lovetime desc
limit 4
";
结果被限制为4,因为我根本不需要更多的数据。总计数单独存储在实际项目表中,以减少查询。
从这个查询中检索到行后,我遍历数组,对总的"lovecount"进行交叉引用,并构建一个格式如下的文本字符串:
You, John Smith, Joe Bloggs and 4 others love this.
这很好,但如果登录用户(你)没有最近的"恋爱时间",它就会失败
我想做的是让当前登录的使用始终位于返回结果的顶部,即使他/她的"lovetime"比最近的4个旧,这样,如果登录用户"喜欢"这个项目,字符串总是以"You"开头。
已登录的用户id在脚本中可用$userid。
澄清
如果我有下表(为了易读起见,时间戳写为简单的英国日期):-
userid commentid lovetime
34 3 02/10/2011
24 3 03/10/2011
13 3 06/10/2011
65 3 14/10/2011
1* 3 10/09/2011
* with userid 1 being the logged in user id
由于"lovetime"的订购,我只会在该订单中返回用户id的34,24,13,65
我想要的是结果返回理想的1,34,24,65。如果这太棘手了,那么当userid存在时,总共获得5行也是可以的。
我希望这一点足够清楚,很难表达出来。
我该如何修改查询以确保结果如所述。
非常感谢。
您可以根据ORDER BY (ID = "auth_user_id") DESC
等条件对结果进行排序