mysql - Laravel:加入多个选择语句
问题描述
我有一个调查应用程序。每个SurveyResponse
都有多个QuestionResponses
. 出于报告目的,我想过滤QuestionResponses
基于为其他QuestionResponses
相同部分回答的值SurveyResponse
- 例如。给我所有选择问题的人Male
的Gender
问题回答。
以下示例 SQL 查询正在运行,但我正在努力在 Laravel 中复制它:
SELECT *
FROM ( SELECT *
FROM ( SELECT *
FROM question_responses ) AS A
JOIN ( SELECT survey_response_id AS JOIN_A
FROM question_responses
WHERE (question_short_name = 'Gender') AND (value = 'Male')) AS B
ON A.survey_response_id= JOIN_A) AS C
JOIN ( SELECT survey_response_id AS JOIN_B
FROM question_responses
WHERE (question_short_name = 'Age') AND (value = '45 to 54')) AS D
ON C.survey_response_id=JOIN_B
我将如何使用 Eloquent 或 Laravel 的查询构建器来做到这一点?
解决方案
您可以使用DB::select
方法来检索结果。
use Illuminate\Support\Facades\DB;
$results = DB::select("SELECT *
FROM ( SELECT *
FROM ( SELECT *
FROM question_responses ) AS A
JOIN ( SELECT survey_response_id AS JOIN_A
FROM question_responses
WHERE (question_short_name = ?) AND (value = ?)) AS B
ON A.survey_response_id= JOIN_A) AS C
JOIN ( SELECT survey_response_id AS JOIN_B
FROM question_responses
WHERE (question_short_name = ?) AND (value = ?)) AS D
ON C.survey_response_id= JOIN_B", ['Gender', 'Male', 'Age', '45 to 54']);
foreach ($results as $key => $row) {
print_r($row);
}
推荐阅读
- ios - iOS 12 的自定义 UICollectionViewFlowLayout 崩溃
- google-chrome - (JSP) Scriptlet 标记代码在 Chrome 中加载两次
- angular - 如何在 Angular 中导入 QueryBase?
- c# - “此站点无法提供安全连接”为 Visual Studio 2019 启用 SSL 配置
- swiftui - SwiftUI 中选项卡的不同 TabBar 背景颜色
- java - Android Java:了解用户是否是该应用程序的新用户,或者该应用程序之前是否已安装
- reactjs - 如何将 FieldArray 与可以具有其他功能的组件一起使用
- c - 如何从 C 中的文本文件初始化双向链表?
- python - 谁能帮我理解下面代码中的问题?
- c# - 将 2 个按钮放在堆栈面板上,但位置结果很奇怪