MySQL替代group_concat?

时间:2014-11-20 21:22:58

标签: php mysql size limit group-concat

使用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

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

使用上面的表格方案/布局..

如果我搜索姓名John Doe ..

我需要同时归还John Doe / CA& John Doe / NY ONLY ONCE! (各)...

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

(抱歉,我很难在正确地解释它,我猜)

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

我期待的是:

  • John Doe / CA
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3

* John Doe / NY  * Col1 Col2 Col3  * Col1 Col2 Col3

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

所以如果我只是按州=' CA&#39 ;;

搜索

我需要像上面那样返回所有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来爆炸&lt; br&gt;然后另一个被^字符爆炸......

问题是,我读到使用GROUP_CONCAT时有一个大小限制?并且没有人知道有多少结果......我不想投资那些不会削减它的东西......或者错误地出去......等等......

经过一些调整/合并后的查询..我有这个工作查询:

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

我必须获得相同的结果,但是不必担心GROUP_CONCAT()的某些大小限制? (我还是MySQL新手)

0 个答案:

没有答案