将 MySQL 查询翻译成 Laravel
Translating MySQL query into Laravel
我有一个 Web 应用程序,目前使用 PHP 对存储在 MySQL 数据库中的一些数据进行排序。我目前正在通过使用 Laravel 框架来增强应用程序,但是我无法将所有各种 MySQL 命令等同于 Laravel 中 DB
使用的命令。
我有一个 table,它有一些重复的 author
名称,我想对这些重复的 citations
列值求和。因此,例如,我可能在 table 中有两位作者称为 John Doe
,一位的引用次数为 30
,另一位的引用次数为 20
。在 运行 当前查询之后,我将有两行 John Doe
,都带有 50
引用。然后我使用 GROUP BY
只获得作者的一个实例。这是我的 PHP 代码的当前查询:
// sum citations for duplicate authors
mysqli_query($connect, "UPDATE searchresponse AS r JOIN(SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author) AS grp ON grp.author = r.author SET r.citations = grp.citations");
现在我一直在尝试以下方法,但我不确定如何在 Laravel 中复制 AS
或 SET
之类的命令:
// select relevant data
$sumData = DB::table('searchresponse')
-> (something);
// insert selected data into table
foreach ($sumData as $value) {
DB::table('searchresponse')->insert(
[
'author' => $value->author,
'citations => $value->citations
]
);
}
基本上我需要知道在 Laravel 中你是如何引用一个 table AS
的东西,这样我就可以将它与自己进行比较,就像在我原来的方法中它引用了 searchresponse AS r
.或者,事实上,如何在 Laravel.
中复制我原来的 PHP MySQL 查询
编辑
正在努力,这似乎更像是我需要做的事情:
// sum citations for duplicate authors
function sumCites($data) {
$sumAll = DB::table('searchresponse')
->join('searchresponse', 'searchresponse.citations', '=', 'searchresponse.citations')
->where('searchresponse.author', '=', 'searchresponse.author')
->get();
}
但是我还是报错
您正在加入同一个 table,因此您需要使用 table 别名进行加入,尝试如下操作:
// sum citations for duplicate authors
function sumCites($data) {
$sumAll = DB::update('searchresponse')
->join('searchresponse as b', 'searchresponse.citations', '=', 'b.citations')
->where('searchresponse.author', '=', 'b.author')
->get();
}
尝试以下方式获取数据:
function sumCites($data){
// Update first
\DB::update('UPDATE searchresponse AS r
JOIN(
SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author
) grp
ON grp.author = r.author
SET r.citations = grp.citations');
//Now fetch all data from that table
$sumAll = \DB::table('searchresponse')->get();
return $sumAll;
}
如果你想更新table,你可以像
一样直接使用你的sql
我有一个 Web 应用程序,目前使用 PHP 对存储在 MySQL 数据库中的一些数据进行排序。我目前正在通过使用 Laravel 框架来增强应用程序,但是我无法将所有各种 MySQL 命令等同于 Laravel 中 DB
使用的命令。
我有一个 table,它有一些重复的 author
名称,我想对这些重复的 citations
列值求和。因此,例如,我可能在 table 中有两位作者称为 John Doe
,一位的引用次数为 30
,另一位的引用次数为 20
。在 运行 当前查询之后,我将有两行 John Doe
,都带有 50
引用。然后我使用 GROUP BY
只获得作者的一个实例。这是我的 PHP 代码的当前查询:
// sum citations for duplicate authors
mysqli_query($connect, "UPDATE searchresponse AS r JOIN(SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author) AS grp ON grp.author = r.author SET r.citations = grp.citations");
现在我一直在尝试以下方法,但我不确定如何在 Laravel 中复制 AS
或 SET
之类的命令:
// select relevant data
$sumData = DB::table('searchresponse')
-> (something);
// insert selected data into table
foreach ($sumData as $value) {
DB::table('searchresponse')->insert(
[
'author' => $value->author,
'citations => $value->citations
]
);
}
基本上我需要知道在 Laravel 中你是如何引用一个 table AS
的东西,这样我就可以将它与自己进行比较,就像在我原来的方法中它引用了 searchresponse AS r
.或者,事实上,如何在 Laravel.
编辑
正在努力,这似乎更像是我需要做的事情:
// sum citations for duplicate authors
function sumCites($data) {
$sumAll = DB::table('searchresponse')
->join('searchresponse', 'searchresponse.citations', '=', 'searchresponse.citations')
->where('searchresponse.author', '=', 'searchresponse.author')
->get();
}
但是我还是报错
您正在加入同一个 table,因此您需要使用 table 别名进行加入,尝试如下操作:
// sum citations for duplicate authors
function sumCites($data) {
$sumAll = DB::update('searchresponse')
->join('searchresponse as b', 'searchresponse.citations', '=', 'b.citations')
->where('searchresponse.author', '=', 'b.author')
->get();
}
尝试以下方式获取数据:
function sumCites($data){
// Update first
\DB::update('UPDATE searchresponse AS r
JOIN(
SELECT author, SUM(citations) AS citations, COUNT(author) AS n FROM searchresponse GROUP BY author
) grp
ON grp.author = r.author
SET r.citations = grp.citations');
//Now fetch all data from that table
$sumAll = \DB::table('searchresponse')->get();
return $sumAll;
}
如果你想更新table,你可以像
一样直接使用你的sql