【问题标题】:mysql sorting by checkbox array datamysql按复选框数组数据排序
【发布时间】:2012-11-03 20:13:14
【问题描述】:

大家好,我有一个关于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');
> 

【问题讨论】:

  • 插入逗号分隔值是不可取的,而不是根据监听方法插入listenmethod为1,2,3,4,5,这样您就可以轻松使用order by获得最高的监听方法跨度>
  • 如果你使用一个单独的表格,每行一个方法而不是逗号分隔的列表,这会容易得多。
  • 嗨@Barmar,是的,在一个理想的世界里是的​​,但是我需要这个运行非常快并且没有时间。再次感谢。

标签: html mysql checkbox


【解决方案1】:

您可以按照 Barmar 在评论中的建议使用分隔表,其他(不)明智的您可以使用联合创建一个临时表,如下所示:(如果您对联合子查询):

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;

【讨论】:

  • 谢谢,谢谢谢谢心跳。那成功了!我知道我本可以查表,但我需要快速解决一些问题。感谢大家的快速回复。
猜你喜欢
  • 2019-09-17
  • 2011-12-24
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多