我尝试计算出现次数并在
之后添加分组我的表:
id | book | chapter | text
1 | 1 | 1 | 'hello hello world'
2 | 1 | 2 | 'hello hello hello hello'
3 | 1 | 3 | 'world'
4 | 1 | 4 | 'hello test'
我执行了我的请求:
SELECT
book,
chapter,
group_concat(text) as text,
ROUND (
(
LENGTH(group_concat(text))
- LENGTH( REPLACE ( group_concat(text), "hello", "") )
) / LENGTH("hello")
) AS 'count'
FROM my_table
WHERE book=43
GROUP BY chapter, book
我想要这个结果:
book | chapter | count
----------------------
43 | 1 | 2
43 | 2 | 4
43 | 3 | 0
43 | 4 | 1
这是有效的!
但我必须用以下内容重新定义变量group_concat_max_len:
SET SESSION group_concat_max_len = 1000000;
我的服务器是一个共享服务器,我没有权限(例如,SET GLOBAL)。
我想在没有group_concat_max_len的情况下执行其他请求以获得相同的结果,您有什么想法吗?
答案 0 :(得分:2)
我认为这只是一个#a:target ~ .wrap #p1 {
color: blue;
}
#a:target ~ .wrap #p2 {
color: red;
}
#a:target ~ #p3 {
color: green;
}
.ta-center {
text-align: center;
}
.wrap {
padding: 5% 12%;
}
:
<div id="a"></div>
<div class="wrap">
<h1 class="ta-center">CSS - Selector :target</h1>
<a href="#a">Sets text in color</a> |
<a href="#">Reset</a>
<p id="p1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<p id="p2">Numquam quas suscipit ipsam asperiores similique blanditiis est deleniti temporibus earum. Autem, nisi officiis atque! Libero ab error.</p>
</div>
<p id="p3">Numquam quas suscipit ipsam asperiores similique blanditiis est deleniti temporibus earum. Autem, nisi officiis atque! Libero ab error.</p>
如果输出连接文本,则只需要处理SUM()
。
请注意,这种计算文本中“hello”数量的方法要简单得多。它用字符串替换字符串一个字符更长,然后简单地取长度的差异。如果您的字符串是UTF-8编码,则应确保附加字符为1个字节,或者使用SELECT book, chapter,
SUM(LENGTH(REPLACE(text, 'hello', 'hellox')) - LENGTH(text)) as num_hellos
FROM my_table
WHERE book = 43
GROUP BY chapter, book;
而不是GROUP_CONCAT()
。
编辑:
我还要注意,对于问题中的示例,聚合不是必需的,因此这就足够了:
CHAR_LENGTH()
然而,OP与LENGTH()
的问题表明实际问题更复杂。