这一定很容易,但我不记得以前是怎么做过的。 我试图在查询中进行另一个查询,其中记录ID匹配:
/*
tables:
models:
model_id
model_name
models_years:
model_year_id
model_id
year
*/
$models = DBW::run('SELECT * FROM models', [], true);
$models_years = DBW::run('SELECT * FROM models_years', [], true);
$output = [];
foreach ($models as $model)
{
$years = [];
foreach ($models_years as $model_year)
{
if ($model_year['model_id'] == $model['model_id'])
{
$years[] = $model_year['year'];
}
}
$output[] = [
'model_name' => $model['model_name'],
'years' => $years
];
}
var_dump( $output );
我使用PDO(设置:ATTR_DEFAULT_FETCH_MODE = FETCH_ASSOC)和" DBW :: run"函数返回$ stmt-> fetchAll()。 这只是我尝试做或改进的一个例子,我知道可以在一个SQL中完成所有这些操作,我之前已经完成并且无法完成记得! :(
答案 0 :(得分:0)
SELECT m.model_name, y.`year`
FROM models AS m
LEFT JOIN models_years As y ON m.model_id = y.model_id
或者根据您的原始问题,您可能需要以下内容:
SELECT m.model_name, group_concat(y.`year`) AS `year`
FROM models AS m
LEFT JOIN models_years As y ON m.model_id = y.model_id
GROUP BY 1
为什么?
1 - 连接表以减少SQL调用
2 - 对结果进行分组(BY 1 == BY m.model_name,这里只是一个懒惰的速记)
3 - group_concat(...)默认会生成:year1,year2,year3,...然后你可以使用PHP explode(',',...)更改为数组如果你需要