1

次のクエリがあります。

SELECT name, GROUP_CONCAT(job SEPARATOR ','),
    count(*) FROM users GROUP BY name ORDER BY name ASC

''を含まないジョブフィールドのみを連結することは可能ですか?その場合、その方法は?「ジョブ」がないものが必要なため、WHERE句を実行できません。

次の表を想像してください。

+-------+----------+
| name  | job      |
+-------+----------+
| Bob   | doctor   |
| Bob   | teacher  |
| Frank | dentist  |
| Tom   |          |
| Tom   |          |
| Tom   |          |
| Tom   |          |
| Tom   | salesman |
+-------+----------+

現在のクエリの結果は次のようになります。

+--------+---------------------------------+----------+
| name   | GROUP_CONCAT(job SEPARATOR ',') | count(*) |
+--------+---------------------------------+----------+
| Bob    | doctor, teacher                 | 2        |
| Frank  | dentist                         | 1        |
| Tom    | ,,,,salesman                    | 5        |
+--------+---------------------------------+----------+

しかし、私はそれを次のようにしたいと思います。

+--------+---------------------------------+----------+
| name   | GROUP_CONCAT(job SEPARATOR ',') | count(*) |
+--------+---------------------------------+----------+
| Bob    | doctor,teacher                  | 2        |
| Frank  | dentist                         | 1        |
| Tom    | salesman                        | 5        |
+--------+---------------------------------+----------+

(このテーブルのロジックは気にしないでください。これは、物事を明確にするための単純な例にすぎません)

この理由は、phpでGROUP_CONCAT(job SEPARATOR'、')をexplode()するためです。実際のテーブルでは、1000の役に立たない,,'が簡単に存在するため、explode関数が非常に遅くなります。ありがとう、

lordstyx。

4

3 に答える 3

2

私は解決策を見つけました:ジョブ''を作成する代わりに、フィールドをNullにするだけで、クエリはそれを無視します。

于 2010-11-28T20:06:33.653 に答える
1

また、使用することができますIF()

SELECT name, GROUP_CONCAT( if(job = '', null, job) SEPARATOR ','),
    count(*) FROM users GROUP BY name ORDER BY name ASC
于 2013-08-14T15:25:50.617 に答える
0
 SELECT name, GROUP_CONCAT(job SEPARATOR ',') FROM USERS
    WHERE job IS NULL OR job NOT LIKE '%,%'
    GROUP BY name ORDER BY name ASC

ただし、コンマを別の文字列に置き換えてから、すべてのジョブを含めることをお勧めします。

 SELECT name, GROUP_CONCAT(REPLACE(job, ',', ';')) FROM USERS
    GROUP BY name ORDER BY name ASC
于 2010-11-28T17:44:40.297 に答える