我目前有以下查询:
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)
我需要帮助搞清楚三件事:
如何在名字和姓氏之间加一个空格?
如何在每个逗号后插入一个空格?
如何在显示姓氏前添加"和"?
假设我的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也是如此.
我正在尝试运行一个看起来像这样的查询:
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'
我目前正在编写一个报告,其中一个字段需要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) 我需要将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()来做到这一点,我以前做过.
这是一个棘手的任务,我真的需要了解这一点.如果有人能帮助我,我会很感激.
我想知道是否有一种方法只选择列中的某些值以便在GROUP_CONCAT中使用而不排除SELECT中的不匹配列.
这是具体的场景:对于我的WordPress网站,我有wp_22_posts和wp_22_postmeta帖子和元之间有一对多关系的表格.我想将连接的结果分组wp_22_posts.ID,wp_22_postmeta.meta_key并wp_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) 我有以下表格:
制品
表格1
表2
以下查询:
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。我有 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) 我尝试使用“concat”和“group_concat”函数返回json对象。问题是我需要使用 group_concat 但我想要一个有效的 JSON 结构。我做错了什么?
...
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"}]}
我似乎找不到有关 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)