1

大家好,我有一个关于mysql查询的快速问题。

我正在尝试进行选择,但我不确定它是否可以完成 - 或者我是否做对了。

我有一个表,其中包含一个名为 ListeningMethod 的字段,其中包含来自逗号分隔数组值的值,这些值是从 html 复选框插入的。有 5 个可能的条目,该字段可以包含所有复选框值,也可以没有复选框值。

样本数据将与此类似:

NOLISTEN,RADIO,INTERNET,SATELLITE,MOBILE

我想做的是对数据进行排序,但要按计数来做。所以,如果“RADIO”出现 10 次,“MOBILE”出现 5 次,“SATELLITE”出现 3 次,间隔超过 10 条记录,那么搜索 100 条记录,它应该能够显示和排序那些提到的结果,“顺序by”设置为顶部最常见的聆听方法。

我试过试一试,但不太顺利。

有什么想法吗?谢谢。

SELECT 
ListeningMethod, 
ListeningMethod REGEXP ("NOLISTEN") as ViewNOLISTEN,
ListeningMethod REGEXP ("RADIO") as ViewRADIO,
ListeningMethod REGEXP ("INTERNET") as ViewINTERNET,
ListeningMethod REGEXP ("SATELLITE") as ViewSATELLITE,
ListeningMethod REGEXP ("MOBILE") as ViewMOBILE
FROM VAT

我尝试添加更多,例如“COUNT(ViewRadio)CountRadio”,但它说该列不存在,所以我有点迷茫。

示例插入语句:

INSERT INTO `VAT` (`ListeningMethod`) VALUES ('NOLISTEN,RADIO,INTERNET,MOBILE');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('NOLISTEN');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO');
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('MOBILE');
> 
4

1 回答 1

1

您可以按照Barmar在评论中的建议使用分隔表,其他(不)明智的做法是,您可以使用如下所示的 union 创建一个临时表:(如果您对unionsub-query没有问题):

SELECT * FROM
(
    SELECT "NOLISTEN" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%NOLISTEN%"
    UNION
    SELECT "Radio" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%RADIO%"
    UNION
    SELECT "INTERNET" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%INTERNET%"
    UNION
    SELECT "SATELLITE" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%SATELLITE%"
    UNION
    SELECT "MOBILE" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%MOBILE%"
) AS VAT2 ORDER BY AMOUNT DESC;
于 2012-11-15T09:44:15.487 回答