Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 组_CONCAT有字符串问题_Mysql_Sql - Fatal编程技术网

Mysql 组_CONCAT有字符串问题

Mysql 组_CONCAT有字符串问题,mysql,sql,Mysql,Sql,它像这样返回输出 SELECT (SELECT GROUP_CONCAT(companyName)FROM company WHERE id IN (27,38)) AS companyName, t.* FROM Test t 但如果我将id作为完整字符串传递 >Apple, Sony 所以它只返回第一个公司名称,所以输出如下 SELECT (SELECT GROUP_CONCAT(companyName) FROM company WHERE id IN (

它像这样返回输出

SELECT (SELECT GROUP_CONCAT(companyName)FROM company WHERE id IN (27,38)) AS companyName, t.* 
FROM Test t  
但如果我将id作为完整字符串传递

>Apple, Sony
所以它只返回第一个公司名称,所以输出如下

SELECT (SELECT GROUP_CONCAT(companyName) 
        FROM company WHERE id IN ("27,38")) AS companyName, t.* 
FROM Test t  
我想检索像苹果、索尼这样的数据。像第一个查询一样,我如何实现这个查询

下面是示例表结构

公司表

>Apple
你需要使用

    --------------------
    ID      companyName
    -------------------
    27         Apple
    28         Sony
    .         .
    .         . 

我看到了您的评论,看起来您正在将拖车的公司ID存储为逗号分隔的字符串,该字符串与of相反,您可以添加新的连接表,该表包含公司和拖车的引用,如

SELECT group_concat(companyName separator ',')
FROM company WHERE id IN ("27,38");
现在,您可以使用联接查询记录

trailer
=======
id name
1  some name 


company
id      name
-------------------
1         Apple
2         Sony

trailer_companies (junction table)
trailer_id company_id
---------------------
1          27
1          38 
如果你想继续你目前的设计,这是强烈不可取的,因为它将很难优化,不适合规模的应用程序


你把27和28作为一个字符串,所以MySQL考虑第一个数字是27,这就是为什么它会返回苹果。如果你想返回苹果和索尼,你必须拆分字符串。

你能发布示例数据吗?我想你遗漏了一些关于如何运行查询的细节。是否尝试将27,38字符串作为参数传递给单个占位符?请参阅我对实际查询的回答,选择组\u CONCATcompanyName SEPARATOR',从t.companyId中id为companyName的公司,t.*从公司ID字段中的t中,有27,38,35,我看到了表测试的表结构,它将公司关联存储为ID 27,38的单独列表,这是一个糟糕设计的示例@M Khalid Junaid,你能为它建议一些表结构吗?它返回第一个公司名称Only@Cross你需要提供更多示例数据和预期输出清晰它只返回第一个公司名称您想要两个公司名称吗?还是只有第一个?都是公司名称
select t.*,group_concat(c.name) companyName
from trailer t
join trailer_companies tc on (t.id = tc.trailer_id)
join company c on (tc.company_id = c.id)
group by t.id 
SELECT 
    (SELECT 
    GROUP_CONCAT(companyName SEPARATOR ',') 
    FROM company 
    WHERE  FIND_IN_SET(id,t.companyIds) > 0
    ) AS companyName, t.* 
FROM Trailers t