【问题标题】:Mysql join and count foreign key according to its valueMysql join 并根据其值计算外键
【发布时间】:2012-05-16 00:19:35
【问题描述】:

我正在尝试制作一个简单的预订系统。

我有两个表,分别是 room_typesrooms。在rooms 中,我有一个布尔字段,显示该房间是否可用。我想列出房间类型,至少有一个房间可供该类型使用。我知道我需要使用连接和计数,但我无法将整个查询放在一起。任何帮助表示赞赏。

我的架构(修剪了不必要的字段):

room_types [id, name(varchar), size(int), price(float) ...]
rooms [no (int), type (int) (foreign key room_types(id)), available (bool), ...]

【问题讨论】:

  • 如果你列出你的架构,你会得到一个更有用的响应。
  • 您需要发布您的架构 - 根据您的结构,您甚至可能不需要加入。

标签: mysql join count


【解决方案1】:
select room_types.id from room_types
    inner join rooms on rooms.room_type = room_types.id and rooms.available = 1
group by room_types.id

这个概念在那里,但我不能准确地编写查询,因为我不知道你的架构。我确实希望你能从中学到你需要的东西并将其应用到你自己的架构中。

select room_types.id, COUNT(rooms.id) from room_types
    left outer join rooms on rooms.room_type = room_types.id and rooms.available = 1
group by room_types.id
order by COUNT(rooms.id) desc

有计数(包括可能有空房的房间类型)。

【讨论】:

  • 谢谢,我猜 count() 的想法让我感到困惑。我比我想象的要简单。
  • 你可以很容易地计算出有多少房间,我只是直接按照你的具体要求。
【解决方案2】:

试试这个:

SELECT  a.id, 
        a.Name,
        COUNT(b.id) AvailableRooms
FROM    room_types a LEFT JOIN rooms b 
            ON b.room_type = a.id
WHERE   b.available = 1
GROUP BY a.id
ORDER BY AvailableRooms DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多