duanrenzou1619 2010-11-30 17:46
浏览 57
已采纳

如何从多个mysql列中选择不同的值并将它们放在一个PHP数组中?

I have a table for songs, where each song can have up to 3 different genres. So in my table, for each song I have column genre1, genre2, and genre3. I'm trying to display all the genres available in a list.

Here's a random example set:

genre1    genre2    genre3
metal     jazz
metal     country   pop
oldies    metal
rap
jazz      hip-hop   choir
choir     metal     jazz

I want the list, done in php, to display in alphabetical order the available distinct genres to choose from. So it should list this:

  • Choir
  • Country
  • Hip-hop
  • Jazz
  • Metal
  • Oldies
  • Pop
  • Rap

All help is appreciated. Perhaps I'm not going about this the smartest way, but I couldn't think of a better way.

  • 写回答

4条回答 默认 最新

  • doushi7805 2010-11-30 17:51
    关注

    So the separate columns don't make a difference? If that is the case you can use a UNION

    SELECT genre1 AS g FROM t UNION SELECT genre2 AS g FROM t UNION SELECT genre3 AS g FROM t
    

    If you have a WHERE clause, then you will need to copy it 3 times, or use an intermediate temporary table

    Good luck!


    table:

    mysql> SELECT genre1, genre2, genre3 FROM music;
    +--------+---------+--------+
    | genre1 | genre2  | genre3 |
    +--------+---------+--------+
    | metal  | jazz    |        | 
    | metal  | country | pop    | 
    | oldies | metal   |        | 
    | rap    |         |        | 
    | jazz   | hip-hop | choir  | 
    | choir  | metal   | jazz   | 
    +--------+---------+--------+
    6 rows in set (0.00 sec)
    

    grouping:

    mysql> SELECT genre1 AS g FROM music UNION ALL
              SELECT genre2 AS g FROM music UNION ALL
              SELECT genre3 AS g FROM music
    +---------+
    | g       |
    +---------+
    | metal   | 
    | metal   | 
    | oldies  | 
    | rap     | 
    | jazz    | 
    | choir   | 
    | jazz    | 
    | country | 
    | metal   | 
    |         | 
    | hip-hop | 
    | metal   | 
    |         | 
    | pop     | 
    |         | 
    |         | 
    | choir   | 
    | jazz    | 
    +---------+
    18 rows in set (0.00 sec)
    

    count:

    mysql> SELECT g, COUNT(*) AS c FROM
                 (SELECT genre1 AS g FROM music UNION ALL
                  SELECT genre2 AS g FROM music UNION ALL
                  SELECT genre3 AS g FROM music)
           AS tg GROUP BY g;
    +---------+---+
    | g       | c |
    +---------+---+
    |         | 4 | 
    | choir   | 2 | 
    | country | 1 | 
    | hip-hop | 1 | 
    | jazz    | 3 | 
    | metal   | 4 | 
    | oldies  | 1 | 
    | pop     | 1 | 
    | rap     | 1 | 
    +---------+---+
    9 rows in set (0.01 sec)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题