【问题标题】:PHP MySQL Combining 2 queriesPHP MySQL 结合 2 个查询
【发布时间】:2013-05-31 10:30:40
【问题描述】:

表格类型

id | genre     | display
---+-----------+------------
1  | Action    | 1
2  | Comedy    | 0
3  | Romance   | 1

桌上电影

id | genre_id  | movie         | year    | display
---+-----------+---------------+---------+------------
1  | 1         | Kill Bill     | 2003    | 1
2  | 1         | Die Hard      | 1988    | 0
3  | 2         | Anchorman     | 2004    | 1
4  | 3         | Titanic       | 1997    | 1
5  | 3         | Casablanca    | 1942    | 1

查询

SELECT genre.genre, movies.movie, movies.year FROM `genre` JOIN `movies` ON
genre.id = movies.genre_id WHERE genre.display = 1 AND movies.display = 1

我正在尝试编写一个 sql 语句,以便按此特定顺序获得以下结果。如果一个流派的显示为 1,那么将显示该流派本身,以及显示为 1 的任何电影。此外,流派名称不应重复:

  1. 动作

    • 杀死比尔
    • 2003
  2. 浪漫

    • 泰坦尼克号
    • 1997
    • 卡萨布兰卡
    • 1942

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    您的查询选择了正确的行。我认为唯一的问题是订购:

    SELECT genre.genre, movies.movie, movies.year
    FROM `genre` JOIN
         `movies`
         ON genre.id = movies.genre_id
    WHERE genre.display = 1 AND movies.display = 1
    order by genre.genre, movies.year desc;
    

    如果您不希望流派重复,您可以使用一个时髦的技巧。即unionNULL电影中的流派,然后正确排序并记住删除之后的名称:

    select (case when movie is NULL then genre else NULL end) as genre,
           movie, year
    from ((select genre, NULL as movie, NULL as year
           from genre
           where display = 1
          ) union all
          (SELECT genre.genre, movies.movie, movies.year
           FROM `genre` JOIN
                `movies`
                ON genre.id = movies.genre_id
           WHERE genre.display = 1 AND movies.display = 1
          )
         ) t
    order by genre,
             movie is null desc,
             year desc
    

    通常,我会说在应用层中执行此操作,但将 SQL 放在一起会很有趣。

    【讨论】:

    • 如果genre.display check 会进入 JOIN 子句怎么办?
    • @raina77ow 应该没什么区别。
    • @raina77ow 。 . .这对内部连接没有影响。
    • 根据输出的二阶应该是什么并不明显
    • @Orangepill 订单应显示流派名称一次,并浏览所有电影及其相关年份。此外,还有一个条件。只会输出显示为 1 的类型及其后续电影。
    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多