MySQL查询以基于另一个表字段提取记录

dohp0rv5  于 2024-01-05  发布在  Mysql
关注(0)|答案(2)|浏览(160)

几年前我用过一点MySQL;现在我忘记了很多,我迷失了。信息:MySQL版本5. 7. 44- PHP版本8. 1. 25我想实现的应该很简单:我有一个DB,有2个表[在我的例子中是组件和类型];它们共享IDtype。这是一个简单的例子:

Tables: 
Components [Code, Qty, IDtype]:
Code10, 2, 1
Code20, 10, 2
Code30, 5, 1
Code40, 3, 2
Code50, 7, 1
---

Types [Type, IDtype]:
Standard, 1
Special, 2
---

字符串
我想得到这个结果:

[Standard, 3] Code10, Code30, Code50
[Special, 2] Code20, Code40


即:Type名称和检索到的记录数,后面是提取的记录列表,我尝试了几次查询都没有成功,最后一个是:

$query = "SELECT * FROM Components
WHERE  Components.IDtype = ALL (SELECT Types.IDtype FROM Types)";


这不会传回任何结果。
即使是我在另一篇文章中找到的这一条也没有做到这一点:

SELECT `KEY`, GROUP_CONCAT(Val SEPARATOR ",") as vals
  from table group by `KEY`;


此外,我承认我的最后一个查询是正确的如何报告我不明白如何从类型表中获取名称和记录计数,因为我只选择了IDtype,而不是整个记录。谢谢

wj8zmpe1

wj8zmpe11#

您可以使用结合链接和群组的SQL查询,根据IDtype数据行,汇总ComponentsTypes数据表的数据。

SELECT t.Type, COUNT(c.Code) AS Total,
    GROUP_CONCAT(c.Code ORDER BY c.Code SEPARATOR ', ') AS Component_Codes
FROM Components c
INNER JOIN Types t ON c.IDtype = t.IDtype
GROUP BY t.Type;

字符串
See this db<>fiddle的一个。

nafvub8i

nafvub8i2#

谢谢阿米特,我试过你的查询,但它给了我一个错误.这是我的查询(翻译成意大利语使用的真实的名字)和错误我得到:

SELECT Tipi.Tipo, COUNT(Componenti.Codice) AS Total, GROUP_CONCAT (Componenti.Codice ORDER BY Componenti.Codice SEPARATOR ', ') AS CompCodes FROM Componenti INNER JOIN Tipi ON Componenti.IDtipo = Tipi.IDtipo GROUP BY Tipi.IDtipo
You have an error in your SQL syntax..to use near 'ORDER BY Componenti.Codice SEPARATOR ', ') AS CompCodes FROM Componenti INNER ' at line 2

字符串
你的小提琴工作得很好,即使有几点我不明白:
从组件c内部联接类型t
你用c作为组件的别名,用t作为类型的别名,对吗?如果是这样,我应该写吗?
从Tipi Tipi INNER加入Tipi
奇怪的语法,无论如何,这不会改变任何事情。

相关问题