1

次の表とメッセージについて考えてみます。それらのいくつかは、何か(文字、数字、句読点)であるフォームの1つ以上のラベルを持ってい{bar|***}ます。***

id  message
---------------------------------------------------
1   foo {bar|112} baz {bar|foo} {bar|215.54}
2   lorem ipsum {bar|foo} dolor {bar|samet} digitas
3   last {bar|t} label example
4   string with no label
5   another {zoo} string with {foo|ads} label

{bar|の形式のラベルが少なくとも1つあるすべてのメッセージを検索する場合 * }私はクエリします:

SELECT * FROM messages WHERE message LIKE '%{bar|%';

しかし今、私は最大で2つのそのようなラベルを持つメッセージだけを選択できるクエリが必要です。

id  message
---------------------------------------------------
2   lorem ipsum {bar|foo} dolor {bar|samet} digitas
3   last {bar|t} label example

言い換えると、(MySQLで)メッセージ内のラベルの数をカウントし、1つまたは2つのラベルを含むメッセージのみを返す方法はありますか?

4

1 に答える 1

1
SELECT * FROM messages WHERE (LENGTH(message) - LENGTH(REPLACE(message,'{bar|','')))/5 BETWEEN 1 AND 2;

これはうまくいくはずです。

于 2012-04-18T19:23:34.207 に答える