php - 如何将这些查询添加在一起(Yii2)?

标签 php mysql sql api yii2

我在 Yii2 中创建了一个 API,其中包含以下查询:

public function actionGetcarinfo($ac, $id){
    Yii::$app->response->format = Response::FORMAT_JSON;
    $rows = (new Query())
        ->select(['a.auto_id', 'm.merk', 'a.model', 'a.uitvoering', 'k.kleur', 't.transmissie', 'a.kmstand', 'a.bouwjaar', 'a.vermogen', 'b.brandstof', 'g.garantie', 'a.prijs'])
        ->from('auto_new a')
        ->where(['a.ac' => $ac, 'a.auto_id' => $id])
        ->join('INNER JOIN', 'tbl_merken m', 'a.merk = m.merk_id')
        ->join('INNER JOIN', 'tbl_kleur k', 'a.kleur = k.kleur_id')
        ->join('INNER JOIN', 'tbl_transmissie t', 'a.transmissie = t.transmissie_id')
        ->join('INNER JOIN', 'tbl_brandstof b', 'a.brandstof = b.brandstof_id')
        ->join('INNER JOIN', 'tbl_garantie g', 'a.garantie = g.garantie_id')
        ->all();
    return $rows;
}

enter image description here

还有这个:

public function actionGetcaroptions($ac, $id){
    Yii::$app->response->format = Response::FORMAT_JSON;
    $rows = (new Query())
        ->select(['atn.NL'])
        ->from('auto_new a')
        ->where(['a.ac' => $ac, 'a.auto_id' => $id])
        ->join('INNER JOIN', 'auto_accessoire acc', 'a.auto_id = acc.auto_id AND a.ac = acc.ac')
        ->join('INNER JOIN', 'tbl_accessoires_trader_new atn', 'acc.code_id = atn.code_id')
        ->all();
    return $rows;
}

enter image description here

现在我想将带有选项的列表添加到上面的查询中。所以 json 会得到类似: options: list with options.

我不知道如何将这两个查询添加在一起。

最佳答案

在普通的旧 SQL 中,您的查询是:

select a.auto_id, m.merk, a.model, a.uitvoering, k.kleur, t.transmissie, a.kmstand, a.bouwjaar, a.vermogen, b.brandstof, g.garantie, a.prijs
from auto_new a
INNER JOIN tbl_merken m on a.merk = m.merk_id
INNER JOIN tbl_kleur k on a.kleur = k.kleur_id
INNER JOIN tbl_transmissie t on a.transmissie = t.transmissie_id
INNER JOIN tbl_brandstof b on a.brandstof = b.brandstof_id
INNER JOIN tbl_garantie g on a.garantie = g.garantie_id
WHERE a.ac = ? and a.auto_id = ?

select atn.NL
from auto_new a
INNER JOIN auto_accessoire acc on a.auto_id = acc.auto_id AND a.ac = acc.ac
INNER JOIN tbl_accessoires_trader_new atn on acc.code_id = atn.code_id
WHERE a.ac = ? and a.auto_id = ?

结合这些

select a.auto_id, m.merk, a.model, a.uitvoering, k.kleur, t.transmissie, a.kmstand, a.bouwjaar, a.vermogen, b.brandstof, g.garantie, a.prijs,
group_concat(atn.NL) as options_list
from auto_new a
INNER JOIN tbl_merken m on a.merk = m.merk_id
INNER JOIN tbl_kleur k on a.kleur = k.kleur_id
INNER JOIN tbl_transmissie t on a.transmissie = t.transmissie_id
INNER JOIN tbl_brandstof b on a.brandstof = b.brandstof_id
INNER JOIN tbl_garantie g on a.garantie = g.garantie_id
INNER JOIN auto_accessoire acc on a.auto_id = acc.auto_id AND a.ac = acc.ac
INNER JOIN tbl_accessoires_trader_new atn on acc.code_id = atn.code_id
WHERE a.ac = ? and a.auto_id = ?
group by a.auto_id, m.merk, a.model, a.uitvoering, k.kleur, t.transmissie, a.kmstand, a.bouwjaar, a.vermogen, b.brandstof, g.garantie, a.prijs

参见http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html了解更多信息。逻辑只是将两个查询与连接添加在一起,然后获取选项行并将它们放入字符串中(这样每个 a.ac 和 a.auto_id 就有一行所有选项)。希望有帮助。

关于php - 如何将这些查询添加在一起(Yii2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35319195/

相关文章:

mysql - 按原始顺序显示列名?

php - Doctrine 2 orm :schema-tool:update drops column

php - 如何将 PHP 表格下载到 CSV 文件中

python - 在 Django ORM 中旋转数据和复杂注释

mysql - 使用 SQL 查询发送通知

php - 使用 Composer 自动加载 PSR-4

php - PHP 的 Vim 折叠

php - 如何强制下载服务器上存储的pdf文件?

php - Mysqli fetch array 警告,无法调试

javascript - 将 ajax 响应设置为变量以使其成为对象