繁体   English   中英

MySQL多对多分组

[英]MySQL Many to Many Grouping

我有具有这些属性的下表:

位置 -location_id,名称

时间表 -schedule_id,名称

locatoin_schedule -location_id,schedule_id

我正在使用这样的查询。

SELECT l.name as locationName, s.name as scheduleName
FROM location AS l, schedule AS s, location_schedule AS ls
WHERE ls.schedule_id = s.schedule_id
AND ls.location_id = l.location_id

这将返回一个看起来像这样的数组:

Array
(
    [0] => stdClass Object
        (
            [locationName] => testing
            [scheduleName] => New Schedule
        )

    [1] => stdClass Object
        (
            [locationName] => another
            [scheduleName] => New Schedule
        )

    [2] => stdClass Object
        (
            [locationName] => testing
            [scheduleName] => Another Schedule
        )

)

如果某个位置具有多个计划表(如testing位置那样),则是否可以返回计划表的多维数组? 因此,我的预期结果将是仅包含2个索引的数组,而不是3个索引...但是测试locationName将包含具有两个调度的数组。

我希望这是有道理的,谢谢您的回答。

您将无法将当前查询处理到所需的数据结构中,或者使用GROUP_CONCAT然后将日程表字符串拆分成所需的结构。 我坚持使用第一个,因为它更干净并且查询速度更快。

$q="
SELECT l.name as locationName, s.name as scheduleName 
FROM location AS l JOIN schedule AS s ON ls.schedule_id = s.schedule_id 
 JOIN location_schedule AS ls
  ON ls.location_id = l.location_id";
$r=$db->query($q)
while($arr=$r->fetch_assoc()){
  $data[$arr['locationName']][]=$arr['scheduleName'];
}

或GROUP_CONCAT选项:

$q="
SELECT l.name as locationName, GROUP_CONCAT(s.name) as scheduleName 
FROM location AS l JOIN schedule AS s ON ls.schedule_id = s.schedule_id 
 JOIN location_schedule AS ls
  ON ls.location_id = l.location_id
GROUP BY locationName";
$r=$db->query($q)
while($arr=$r->fetch_assoc()){
  $schedules=explode($arr['scheduleName']);
  $data[$arr['locationName']]=$schedules
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM