【问题标题】:MySQL: Choosing multiple tables based on number of columnsMySQL:根据列数选择多个表
【发布时间】:2014-11-19 22:08:03
【问题描述】:

我有一个包含几种不同类型调查的数据库。每个调查在数据库中都有自己的表。一些调查具有相同的结构。它们具有相同的列数。我想根据表名包含的内容和列数选择调查的子集。

我想要的调查可以有两个不同的名称,并且名称中都包含数字:

SELECT table_name FROM information_schema.TABLES 
WHERE ((TABLE_NAME like '%ls_survey_%') or (TABLE_NAME like '%ls_old_survey_%')) 
and TABLE_NAME rlike '[0123456789]'

到目前为止一切顺利。我知道我可以得到一个表中的列数:

SELECT count(*) FROM information_schema.COLUMNS WHERE table_name = 'tableName'

对于如何组合上面的两个表达式来只获得满足第一个表达式并且只有给定列数的表,我感到很困惑。

【问题讨论】:

    标签: mysql multiple-tables information-schema limesurvey


    【解决方案1】:

    当然可以,您可以查询 COLUMNS 表,并使用带有 HAVING 子句的 GROUP BY 查询:

    SELECT `table_name` 
    FROM
      `information_schema`.`columns` 
    WHERE
      `table_schema`=DATABASE() 
      AND (`table_name` LIKE '%ls_survey_%' OR `table_name` LIKE '%ls_old_survey_%')
      AND `table_name` RLIKE '[0123456789]'
    GROUP BY
      `table_name`
    HAVING
      COUNT(*)=3 -- number of columns
    

    但是,我建议您尝试重新考虑您的数据库结构:在您的数据库中拥有大量类似的表(每次调查一个表)通常不是一个好主意。一个想法是像这样存储您的调查:

    ID survey | Question   | Answer
    --------------------------------
    3456      | question1? | ....
    3465      | question2? | ....
    3456      | question3? | ....
    7777      | question1? | ....
    7777      | question4? | ....
    7777      | question5? | ....
    

    【讨论】:

    • 感谢您的回答。数据库结构是在我尝试从 LimeSurvey(开源调查系统)获取类似调查时给出的。
    猜你喜欢
    • 2021-12-20
    • 2017-08-31
    • 2015-04-09
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多