标签: group-concat

MySQL GROUP_CONCAT:格式化输出

我目前有以下查询:

SELECT group_concat(DISTINCT usrFirst, usrLast) as receiver_name  //etc
Run Code Online (Sandbox Code Playgroud)

使用PHP时,它会输出我的名字列表,如下所示:

<?php 
    echo $row['receiver_name'];

    //Outputs: JohnDoe,BillSmith,DaveJones

    //Desired output: John Doe, Bill Smith, and Dave Jones
Run Code Online (Sandbox Code Playgroud)

我需要帮助搞清楚三件事:

  1. 如何在名字和姓氏之间加一个空格?

  2. 如何在每个逗号后插入一个空格?

  3. 如何在显示姓氏前添加"和"?

php mysql group-concat

2
推荐指数
1
解决办法
4339
查看次数

GROUP_CONCAT和LEFT_JOIN问题 - 并非返回所有行

假设我的DB方案如下:

T_PRODUCT
id_product (int, primary)

two entries: (id_product =1) , (id_product =2)

T_USER
id_user (int, primary)
id_product (int, foreign key)
name_user (varchar)

two entries: (id_product=1,name_user='John') , (id_product=1,name_user='Mike')
Run Code Online (Sandbox Code Playgroud)

如果我运行第一个查询来获取所有产品及其用户(如果有的话),我会得到:

SELECT T_PRODUCT.id_product, T_USER.name_user 
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;

>>
id_product name_user
1          John
1          Mike
2          NULL
Run Code Online (Sandbox Code Playgroud)

在我看来很好.现在,如果我想要同样的事情,除了我想每行有一个产品,带有连接的用户名(如果有任何用户,否则为NULL):

SELECT T_PRODUCT.id_product, GROUP_CONCAT(T_USER.name_user) 
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;

>>
id_product name_user
1          John,Mike

**expected output**:
id_product name_user
1          John,Mike
2          NULL
Run Code Online (Sandbox Code Playgroud)

如果产品没有用户,则GROUP_CONCAT会阻止mysql为此产品生成一行,即使存在LEFT JOIN也是如此.

  1. 这是预期的MySQL行为吗? …

mysql sql left-join group-concat

2
推荐指数
1
解决办法
1387
查看次数

mysql GROUP_CONCAT(查询)

我正在尝试运行一个看起来像这样的查询:

SELECT
  GROUP_CONCAT(vehicles.id)  
FROM                                                                
 vehicles                         
WHERE                                                               
 cars.id = vehicles.id
Run Code Online (Sandbox Code Playgroud)

带来正确的数据:

1,2,3
Run Code Online (Sandbox Code Playgroud)

但是,现在我想要使用GROUP_CONCAT的品牌名称

SELECT
  GROUP_CONCAT(SELECT brand_name FROM brands WHERE vehicles.id = brand.id) 
FROM                                                                
 vehicles                         
WHERE                                                               
 vehicles.id = 100
Run Code Online (Sandbox Code Playgroud)

所以我可以得到 'Brand1', 'Brand2', 'Brand3'

mysql group-concat

2
推荐指数
1
解决办法
2951
查看次数

JPA Criteria API group_concat用法

我目前正在编写一个报告,其中一个字段需要group_concat.

CriteriaQuery<GameDetailsDto> criteriaQuery = criteriaBuilder
                .createQuery(GameDetailsDto.class);
Root<BetDetails> betDetails = criteriaQuery.from(BetDetails.class);
Expression<String> betSelection = betDetails.get("winningOutcome");
criteriaQuery.multiselect(
    // other fields to select
    criteriaBuilder.function("group_concat", String.class, betSelection),
    // other fields to select
    );
//predicate, where clause and other filters

TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
Run Code Online (Sandbox Code Playgroud)

这会在行上抛出一个空指针异常:

TypedQuery<GameDetailsDto> typedQuery = entityManager.createQuery(criteriaQuery);
Run Code Online (Sandbox Code Playgroud)

我错误地使用了criteriaBuilder的函数方法吗?
文件说:

function(String name, Class<T> type, Expression<?>... args);
Run Code Online (Sandbox Code Playgroud)

jpa group-concat

2
推荐指数
1
解决办法
6138
查看次数

在MySQL中使用多个连接和group_concat()?

我需要将Joins用于项目,但我忘记了如何使用它.这一切都只是搞砸了我的脑袋,我无法弄明白.

我有五张桌子,所有这些都需要加入:

categories - id, name
movies_categories - movie_id, category_id
movies - id, title, description, release_date, cover_image
users - id, username, password
user_movies - user_id, movie_id, favorite, review, watch_date, rating
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该项目与电影相关,而user_movies包含用户观看过的所有电影.我需要做的是获得某个用户观看过的所有电影.所以,我需要每部电影的所有电影信息,用户名(这几乎是用户需要的所有信息),以及user_movies中的一些列(除了前两个之外的所有列).我还需要将每部电影的所有类别合并为一个"变量".我相信你可以使用GROUP_CONCAT()来做到这一点,我以前做过.

这是一个棘手的任务,我真的需要了解这一点.如果有人能帮助我,我会很感激.

mysql join group-concat database-table

2
推荐指数
1
解决办法
2248
查看次数

MySQL只选择列中的某些值而不排除行

我想知道是否有一种方法只选择列中的某些值以便在GROUP_CONCAT中使用而不排除SELECT中的不匹配列.

这是具体的场景:对于我的WordPress网站,我有wp_22_postswp_22_postmeta帖子和元之间有一对多关系的表格.我想将连接的结果分组wp_22_posts.ID,wp_22_postmeta.meta_keywp_22_postmeta.meta_value为每个组选择一个以分号分隔的列表.我只想抓住元键和值,如果键匹配"authorid"或"isbn"; 但是,我不想在没有"authorid"或"isbn"的情况下排除行 - 我宁愿只返回null非匹配行的类似行.

以下是我目前使用的查询,但正如您所看到的,它正在提取所有元数据:

SELECT posts.post_title, MAX(posts.post_date_gmt), posts.post_content, posts.guid AS url, posts.comment_count,
    GROUP_CONCAT(postmeta.meta_key ORDER BY postmeta.meta_value DESC SEPARATOR ';') AS meta_key,
    GROUP_CONCAT(postmeta.meta_value ORDER BY postmeta.meta_value DESC SEPARATOR ';') AS meta_value
FROM wp_22_posts AS posts
JOIN wp_22_postmeta AS postmeta ON (posts.ID = postmeta.post_id)
WHERE posts.post_status = 'publish'
GROUP BY posts.ID
Run Code Online (Sandbox Code Playgroud)

mysql select group-by group-concat

2
推荐指数
1
解决办法
1575
查看次数

Double导致GROUP_CONCAT在MySQL中具有双JOIN

我有以下表格:

制品

  • 字段:id,title
  • 值:(1,'产品1')

表格1

  • 字段:id,idProduct
  • 值:(1,1),(2,1)

表2

  • 字段:id,idProduct
  • 值:(3,1),(4,1)

以下查询:

SELECT
  p.*,
  GROUP_CONCAT(t1.id ORDER BY t2.id),
  GROUP_CONCAT(t2.id ORDER BY t2.id)
FROM
  products p
JOIN table1 t1 ON p.id=t1.idProduct
JOIN table2 t2 ON p.id=t2.idProduct
GROUP BY
  p.id
Run Code Online (Sandbox Code Playgroud)

预期结果是:

1 | Product 1 | 1,2     | 3,4 
Run Code Online (Sandbox Code Playgroud)

不幸的是我得到:

1 | Product 1 | 1,1,2,2 | 3,3,4,4
Run Code Online (Sandbox Code Playgroud)

mysql join group-concat

2
推荐指数
1
解决办法
667
查看次数

MySQL选择查询以根据列表值获取记录

我正在使用MySQL。我有 3 个表如下。

表:subject_Master

--------------------------
subjectId   | subjectShortName
----------------------------------
1           |   English
2           |   French
3           |   German
4           |   Latin
----------------------------------
Run Code Online (Sandbox Code Playgroud)

表:class_Master

-----------------------------------
classId     | className
----------------------------------
1           |   Rose
2           |   Dasy
3           |   Lily
Run Code Online (Sandbox Code Playgroud)

表:主题分配

------------------------------------------
allocationId    |   classId |   subjectId
-------------------------------------------
1               |   1       |   1,2
2               |   2       |   2,3,4
3               |   3       |   1,2,3,4
Run Code Online (Sandbox Code Playgroud)

我如何获得 SQL 结果如下,想要获取 subjectAllocation 行中每个 subjectId 的 subjectName

ClassName   |   SubjectName
-------------------------------------------
Rose        |   English,French
Dasy        |   French,German,Latin
Lily        | …
Run Code Online (Sandbox Code Playgroud)

mysql sql select group-concat find-in-set

2
推荐指数
1
解决办法
1100
查看次数

如何使用 GROUP_CONCAT 返回 JSON_ARRAY

我尝试使用“concat”和“group_concat”函数返回json对象。问题是我需要使用 group_concat 但我想要一个有效的 JSON 结构。我做错了什么?

  1. {“a”:“a”,“b”:“b”,“id”:空}
  2. [{"id": "123"}]

...

SELECT JSON_REPLACE((
                  SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           )), '$.id', (
                  SELECT CONCAT(
                             '[', group_concat(JSON_OBJECT(
                          'id',
                          '123')),
                             ']'))
     )
Run Code Online (Sandbox Code Playgroud)

结果: {"a": "a", "b": "b", "id": "[{\"id\": \"123\"}]"}

预期的: {"a": "a", "b": "b", "id": [{"id": "123"}]}

mysql sql json group-concat

2
推荐指数
1
解决办法
2405
查看次数

多个 GROUP_CONCAT 列之间的顺序

我似乎找不到有关 GROUP_CONCAT 函数默认行为的任何信息,主要是当我使用其中多个时,返回的值之间的顺序是否相同?

对于此示例表和数据:

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `parentId` int(11) NOT NULL,
  `weight` int(11) NOT NULL,
  `color` varchar(7) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`id`, `parentId`, `weight`, `color`) VALUES
(1, 1,  500,    '#aa11dd'),
(2, 1,  770,    '#ffffff'),
(3, 2,  100,    '#ff00ff'),
(4, 2,  123,    '#556677');
Run Code Online (Sandbox Code Playgroud)

如果我这样做选择:

SELECT `parentId`, 
        GROUP_CONCAT(`weight`), 
        GROUP_CONCAT(`color`), 
        GROUP_CONCAT(`id`) 
FROM `test` 
GROUP BY `parentId`
Run Code Online (Sandbox Code Playgroud)

它返回:

parentId    GROUP_CONCAT(weight)    GROUP_CONCAT(color)     GROUP_CONCAT(id)
1           500,770                 #aa11dd,#ffffff         1,2
2           79798,123               #ff00ff,#556677 …
Run Code Online (Sandbox Code Playgroud)

mysql database group-concat mariadb

2
推荐指数
1
解决办法
846
查看次数