我有以下MySQL查询:
SELECT Project.*, `trk_deleted`, `trk_status`, `trk_state`
FROM `project` AS `Project` LEFT JOIN `trackline` ON `prj_id` = `trk_project`
WHERE `prj_deleted` = '0' GROUP BY `prj_id` ORDER BY `prj_name`;
这有点难以解释,但基本上,我的数据库中有一个结构,其中 Projects 有多个 Tracklines 。这两个实体分别具有字段prj_deleted
和trk_deleted
,如果它被删除(从视图中隐藏),则可以具有1值,或者0值不被删除(仍然在视图中)。 / p>
我的项目视图页面根据该项目中的轨迹线显示每个项目的图标。这些图标根据trk_status
和trk_state
我的项目视图页面应该只显示项目一次,即使它有多个跟踪线(因此GROUP BY prj_id
)
我的问题:
来自GROUP BY上的Mysql文档:
“此外,添加ORDER BY子句不会影响每个组中值的选择。在选择值之后会对结果集进行排序,而ORDER BY不会影响服务器选择的值。” p>
理想情况下,我的项目视图页面应显示未删除的跟踪线的图标。这就是为什么我希望在发生GROUP BY之前可以对trk_deleted
进行ORDER BY,以便使用未删除的轨迹线进行分组。
希望有人能够理解我想在这里得到什么。
答案 0 :(得分:0)
如果您可以提供一些示例数据以及您希望响应的内容,我可能会帮助您提供更好的查询。同时:
SELECT Project.*, MAX(`trk_deleted`), MAX(`trk_status`), MAX(`trk_state`)
FROM `project` AS `Project`
LEFT JOIN `trackline` ON `prj_id` = `trk_project` AND trk_deleted = '0'
WHERE `prj_deleted` = '0'
GROUP BY `prj_id` ORDER BY `prj_name`;
答案 1 :(得分:0)
如果我找到了你,你想要获得所有未删除的项目,是否有轨迹线,以及未删除的轨迹线。但添加trk_delete = 0
会排除没有跟踪线的项目。
我对mysql不太熟悉,但我认为你想要的是IS NULL
SELECT
Project.*,
`trk_deleted`,
`trk_status`,
`trk_state`
FROM
`project` AS `Project`
LEFT JOIN
`trackline` ON `prj_id` = `trk_project`
WHERE
`prj_deleted` = '0'
AND trk_deleted = '0' OR trk_deleted IS NULL
GROUP BY
`prj_id`
ORDER BY
`prj_name`
如果不是这样,请自己澄清