【问题标题】:Mysql query with loop带循环的Mysql查询
【发布时间】:2019-11-20 11:40:35
【问题描述】:

我有这个查询,适用于从 phpmyadmin 的视图和 csv 导出。

是否可以创建一个不重复的循环?谢谢!

SELECT
id, date, name,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '-', 1), '(', -1) AS op,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '-', 4), '-', -3) AS dt,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, ')', 1), '-', -1) AS hour,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '(', 2), '-', -1) AS note
FROM center
WHERE center.date BETWEEN '2019-08-01 00:00:00' AND '2019-12-31 00:00:00'
and message!= ''
HAVING op = 'op1' OR op = 'op2'

UNION SELECT 
id, date, name,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '-', 6), '(', -1) AS op,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '-', 9), '-', -3) AS dt,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, ')', 2), '-', -1) AS hour,
SUBSTRING_INDEX(SUBSTRING_INDEX(message, '(', 3), '-', -1) AS note
FROM center
WHERE center.date BETWEEN '2019-08-01 00:00:00' AND '2019-12-31 00:00:00'
and message!= ''
HAVING op = 'op1' OR op = 'op2'

UNION SELECT.... more

【问题讨论】:

  • 消息的内容是什么?
  • 类似这样的事情:(op4 - 09-09-2019 - 8:36:15)- Lorem ipsum .....(op2 - 12-09-2019 - 8:12:12) - Lorem ipsum ..... (op1 - 15-09-2019 - 9:22:11) - Lorem ipsum ..... (op3 - 09-09-2019 - 9:36:50) - Lorem ipsum。 .... (op4 - 18-09-2019 - 7:36:22) - Lorem ipsum.....
  • 今晚我会给你写一个查询
  • 你能告诉我一排最多有多少件吗?
  • 我不知道最大件数,因此我想优化我的查询。

标签: mysql loops csv


【解决方案1】:

您可以测试此查询。它分裂了一个最大值。连续 10 件。

SELECT `id`,`date`,`name`,CONCAT('op',`op`) as op,`dt`,`hour`,`note` 
  ,subid,cols -- only for test. you can remove this line
FROM (
  SELECT c.id,c.date,c.name,
    cnt.*,
    -- count the pieces in one row
    (LENGTH(message)-LENGTH(replace(message,'(op','')))/3 as cols,
    -- Split String in piece and store in @content
    @content := SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(' (op ',c.message,' (op'), ' (op', subid+3), ' (op', -1)
  , SUBSTRING_INDEX(@content, ' - ',1) as op
  , SUBSTRING_INDEX( SUBSTRING_INDEX(@content, ' - ',2), ' - ',-1) as dt
  , TRIM( TRAILING ')' FROM SUBSTRING_INDEX( SUBSTRING_INDEX(@content, ' - ',3), ' - ',-1)) as hour
  , SUBSTRING_INDEX( SUBSTRING_INDEX(@content, ' - ',4), ' - ',-1) as note
  FROM center c
    CROSS JOIN (
      SELECT 0 as subid UNION ALL SELECT 1 UNION ALL SELECT 2
       UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
       UNION ALL SELECT 6  UNION ALL SELECT 7  UNION ALL SELECT 8
       UNION ALL SELECT 9
    ) as cnt       
 ) as result
 WHERE 
 subid < cols
 AND `date` BETWEEN '2019-01-01 00:00:00' AND '2019-12-31 00:00:00'
 AND op in (1,2)
 ORDER BY id,subid,cols;

这是一个示例:http://www.sqlfiddle.com/#!9/8bc3b4/60

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多