1
我有3个例子中的表。用户,grammar_learned,words_learned两个连接和两个计数得到laravel
第一:
CREATE TABLE grammar_learned
(
id INT(10) UNSIGNED PRIMARY KEY NOT NULL,
grammar_id INT(11) NOT NULL,
user_id INT(11) NOT NULL,
);
CREATE TABLE words_learned
(
id INT(10) UNSIGNED PRIMARY KEY NOT NULL,
word_id INT(11) NOT NULL,
user_id INT(11) NOT NULL,
);
CREATE TABLE users
(
id INT(10) UNSIGNED PRIMARY KEY NOT NULL,
name VARCHAR(255) NOT NULL,
);
而且我的查询:
$users = User::leftJoin('words_learned', 'users.id', '=', 'words_learned.user_id')
->leftJoin('grammar_learned', 'users.id', '=', 'grammar_learned.user_id')
->selectRaw('users.*, count(words_learned.id) as learned_count, count(grammar_learned.id) as grammar_count')
->groupBy('users.id')->orderBy("learned_count", "desc")->get();
我有1分排在我的表grammar_learned和3行中words_learned表,但查询返回3行(计数)为words_learned - 正确和3行为grammar_learned(必须返回1)。我不明白为什么,请大家帮忙
不久: 我想这样的结果:
0 => array:4 [▼
"id" => 1
"name" => "username"
"learned_count" => 3
"grammar_count" => 1
]
,但我得到
0 => array:4 [▼
"id" => 1
"name" => "username"
"learned_count" => 3
"grammar_count" => 3
]
当你加入多个表一起,你要结束了,至少拉动符合条件的行数'words_learned'。你可以包括你的返回数据集目前的样子,以及你真正希望它看起来像你的问题上面的样本?这将使我们更容易找出你想要的东西。解决方案可能使用子查询,也可能是在选择列表列中使用case语句。 – gmiley
@gmiley thx,已更新我的问题 –