【发布时间】:2015-03-02 22:15:49
【问题描述】:
感谢@LukasGeiter 的帮助,我改进了我的引文和书籍数据库。 第 4 次编辑后,我将问题简化为:
我现在可以列出某些类型的作者,并根据他们的重要性以及分配给给定作者的“喜欢”和“不喜欢”对列表进行排序
这是生成我的收藏的代码:
$targetted = Capacitytype::find($capacity); // this selects Sci-Fi writers only from among all writers
$rank_entities_by_capacity = Entity::join('entity_capacitytypes', function($q) use ($capacity){
$q->on('entity_capacitytypes.entity_id', '=', 'entities.id');
$q->where('entity_capacitytypes.capacitytype_id','=', $capacity);
})->leftJoin('user_attitudes', function($q) {
$q->on('user_attitudes.entity_id', '=', 'entities.id');
$q->where('item_type', '=', 'entity');
})
->selectRaw('entities.*, SUM(user_attitudes.importance) AS importance'
, SUM(user_attitudes.attitude) AS attitude'
)
->groupBy('entities.id')
->orderBy('importance', 'desc')
->take(6)
->get();
我需要什么:
1) 我想按特定用户分配给每个列出的作者的 UPVOTES 数量对列表进行排序
卢卡斯贡献的代码完成了这项工作:
'SUM(IF(user_id = ' . Auth::user()->id . ', user_attitudes.attitude, 0)) AS karma_current_user'
现在我想要另一种排序方法:
每个作者都有一定数量的引用和出版的书籍。 用户可以 UPVOTE 和 DOWNVOTE 这些创作
在表 user_attitudes 中看起来像这样:
> id | item_id | item_type | entity_id | importance | attitude (VOTES) | creator_id
> 1 | 51 | entity | 51 | -1 |100
> 2 | 32 | book | 51 | -1 |100
> 3 | 33 | book | 51 | -1 |100
简单的英语: - 实体 51 收到了用户 #100 对终身成就的反对票(lukas 已经提供了代码)
- 此外,由同一实体 (#51) 编写的两本书(#32 和 #33)因其内容而获得了 DOWN-VOTES。
要做的事: 我需要列出实体(在这种情况下是科幻作家),并按分配给他们创作的书籍的这些 DOWN-VOTES 对列表进行排序。在上面的例子中,作者的得分是“-2”。
- 注意:entity_id 列与相关实体的信息重复 - 我添加它是为了避免将额外的数据透视表与关于作者身份的信息加入。
一个很好的现实例子:
为了将我的需求转化为 StackOverflow 模型,我现在可以将喜欢的人分配给帮助我的人(lukas 在我的表 user_attitudes.attitude 中获得 +1 UP-VOTE)。我还可以列出所有收到我点赞的用户。这个做完了。 现在,我想查看按用户对我自己的问题提供的答案数量排序的用户排名。 Lukas 以 c 名列榜首。 6个答案……等等。
可能的解决方案:
可能我只需要在这一行添加一个额外的IF子句
'SUM(IF(user_id = ' . Auth::user()->id . ', user_attitudes.attitude, 0)) AS karma_for_books'
添加条件:
IF user_attitudes.item_type = book
IF user_attitudes.entity_id = (entity)....
IF attitude = '-1' // counting downwotes only
我不知道这个任务的语法规则。
我们需要额外的 leftJoin 吗? 在对数据库结构进行两次更改后,我感到很困惑。 这件事可能会有所帮助: Laravel 4 query builder - with complicated left joins
Laravel Eloquent and Multiple Joins
但它超出了我的范围......
任何帮助表示赞赏。谢谢。
谢谢
【问题讨论】:
-
我找到了这个解决方案:randomsnippets.com/2008/10/05/…,但与用户相关的查询仍然存在问题。
标签: php jquery laravel eloquent left-join