簡體   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