0

使用 group_concat 显然有大小限制....所以我正在寻找另一种方法来实现这一点。

数据库结构:

John Doe CA  Col1   Col2   Col3
John Doe CA  Col1   Col2   Col3
John Doe CA  Col1   Col2   Col3
Jane Doe CA  Col1   Col2   Col3
Jane Doe CA  Col1   Col2   Col3
John Doe NY  Col1   Col2   Col3
John Doe NY  Col1   Col2   Col3
Jenny Doe WI  Col1   Col2   Col3
Billy Bob PA  Col1   Col2   Col3
Billy Bob PA  Col1   Col2   Col3
John Doe WA  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3

进行搜索时,我需要返回任何符合搜索条件的人,但需要以某种方式对数据进行分组/组织。

使用上表方案/布局..

如果我搜索 Name John Doe..

我只需要返回 John Doe/CA 和 John Doe/NY 一次!(每个)...

但不知何故,还有与该名称/状态匹配关联的所有行的所有字段/列(col1、col2、col3...等)。

(对不起,我想我很难正确解释它)

使用与上述相同的搜索,John Doe(例如)

我期待类似的东西:

  • 约翰·多伊 / CA
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3

*约翰·多伊/纽约 * Col1 Col2 Col3 * Col1 Col2 Col3

对于任何类型的搜索查询,我都需要相同类型的返回

因此,如果我只是按 where state = 'CA';

我需要像上面那样返回所有 CA 匹配项:

1.) 单一姓名/州

2.) 符合该条件的所有记录中的所有列

John Doe / CA
 * Col1   Col2   Col3
 * Col1   Col2   Col3
 * Col1   Col2   Col3
 * Col1   Col2   Col3
 * Col1   Col2   Col3

Jane Doe / CA
 * Col1   Col2   Col3
 * Col1   Col2   Col3

Billy Bob / CA
 * Col1   Col2   Col3
 * Col1   Col2   Col3

这次尝试:

SELECT *, COUNT(*) as casecount FROM mytable WHERE first LIKE '%John%' AND wstate LIKE '%CA%'group by first,last,state;

让我接近...我只为每个“匹配”返回 1 个“名称/状态”(而不是说 John Doe/CA 的所有 5 条记录)

搜索词略有不同:

SELECT *, COUNT(*) as casecount FROM mytable WHERE first LIKE '%John%' group by first,last,state;

再次让我只为每场比赛返回 1 条“姓名/州”记录(而不是为 John Doe/CA 返回 5 条记录,为 John Doe/NY 返回 3 条记录)..

到目前为止,这对我很有帮助。我被困在如何继续获得我需要的东西之后。

当我从数据库中获得响应时..我遍历记录/行..并在某个表中显示详细信息(以帮助信息的可视化显示)...

但我现在需要将所有 Col1、Col2、Col3..etc 数据转储到此主名称/状态数据下方的单元格/区域/占位符中......

以 PHP 为例,就像我需要遍历我的数组,然后在其他“记录/行”上执行另一个子/嵌套循环

继续我已经尝试过这个:(Group_Concat)

SELECT CONCAT(first, ' ', middle, ' ',last) as fullName, GROUP_CONCAT(COl1, '^', Col2, '^', Col3 SEPARATOR '<br>') FROM myTable GROUP BY CONCAT(first, ' ', middle, ' ',last);

这正是我想要的..(似乎)..至少给了我一大块的数据,我想我可以使用一些 PHP 来爆炸 < br > 然后另一个爆炸 ^ 字符......

问题是,我读到使用 GROUP_CONCAT 有大小限制?而且不知道有多少结果..我不想投资不会削减它的东西..或出错..等等..

在对查询进行一些调整/合并之后..我有这个工作查询:

SELECT *, COUNT(*) as casecount , GROUP_CONCAT(Col1, '^', Col2, '^', Col3 SEPARATOR '<br>') FROM mytable GROUP BY first, middle, last, state;

我有哪些易于阅读/理解的替代方案才能获得相同的结果,但不必担心 GROUP_CONCAT() 的某些大小限制?(我还是 MySQL 新手)

4

0 回答 0