gpt4 book ai didi

php - 无法弄清楚如何从查询中获得我想要的结果

转载 作者:行者123 更新时间:2023-11-29 01:30:49 24 4
gpt4 key购买 nike

我是数据库和 mysql 的新手。我什至很难确定我面临的问题到底是什么,也不知道相关的谷歌搜索是什么。如果这是一个令人难以置信的迟钝问题,请原谅我。我有两个表 tabscats

tabs 是这样的:

name | order
tab1 | 3
tab2 | 0
tab3 | 1
tab4 | 2

cats 是这样的:

name | tab_name
cat1 | tab3
cat2 | tab3
cat3 | tab1
cat4 | tab1
cat5 | tab1

我想这是一种一对多的关系,tabs-to-cats。我的问题是如何构造一个只返回不同选项卡名称的查询,每个选项卡名称及其所有关联的猫?我可以得到所有猫和许多重复选项卡的结果。或者我只能得到不同的标签,但每个标签只能得到一只猫。也许我应该只用我的 php 代码测试重复的选项卡?或者查询选项卡然后查询每个选项卡的所有猫?似乎必须有一种更直接的方法。我目前正在使用这个查询:

SELECT t.name AS tab, c.name AS cat FROM tabs t
LEFT JOIN categories c
ON t.name=c.tab_name
ORDER BY t.order;

最佳答案

您可以使用 MySQL 的 GROUP_CONCAT()生成逗号分隔的 cat 列表,如果这是您想要的:

SELECT
t.name AS tab,
GROUP_CONCAT(c.name) AS cats
FROM
tabs t
LEFT JOIN categories c ON t.name = c.tab_name
GROUP BY tab
ORDER BY t.`order` /* ORDER is a reserved keyword and has to be quoted as `order` */

这会产生如下输出:

tab      cats
------------------------------
Tab1 Cat1,Cat2,Cat3,Cat4
Tab2 Cat4,Cat3,Cat6,Cat7

但是,

您拥有的每个 tab 生成多行的查询是一种更传统的处理方式。在您的应用程序代码中,您将遍历 tab cat 对并测试 tab 的更改。如果您使用上面的 GROUP_CONCAT(),您还需要在应用程序代码中的 , 处拆分它。

无论哪种方式,您都无法在 SQL 中逐行获得分层结果 - 您必须为每一行重复 tab。这正是结果集二维结构的本质。因此它需要一些应用程序端处理。

关于php - 无法弄清楚如何从查询中获得我想要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13638219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com