我之前在这个主题中已经问过这个问题请仔细阅读sql-print-many-word-between-every-columns-with-many-conditions
但是这个问题和之前的问题之间的差异,我想在许多俱乐部名称中建立一个集体球员或一组球员,例如:
El Ahly俱乐部的名字有一个12球员,我想将它拆分成3 teams每个team都有4球员什么,我想看看有多少team每个俱乐部的名字里面,然后把它们不变的数字里面(组)4 8 16 32 64 128 256基础上的数量teams打印**ANY WORD**它们之间以后类似的东西与过滤数据select full_name,club_name from players where y_of_birth=2000的期望的输出应该是这样的:
更新 :
+----+------+---------------------+
| full_name | club_name |
+--------------+------------------+
| Ahmed Sayed | El Ahly |
+--------------+------------------+
| Kareem Gaber | El Ahly |
+--------------+------------------+
| Maher Zein | El Ahly |
+--------------+------------------+
| Mohab Saeed | El Ahly |
+----+------+--+------------------+
| ahmed shawky | Petroget |
+--------------+------------------+
| shaker ali | Petroget |
+--------------+------------------+
| omar Saed | Petroget |
+--------------+------------------+
| moataz Gamal | Petroget |
+------+-------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| husein mazen | Cocorico |
+--------------+------------------+
| hassan maged | Cocorico |
+--------------+------------------+
| maged ahmoud | Cocorico |
+--------------+------------------+
| zakareya gad | Cocorico |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| gamel kamel | El Ahly |
+--------------+------------------+
| omar galal | El Ahly |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| khaled zein | Petroget |
+--------------+------------------+
| shady sameer | Petroget |
+--------------+------------------+
| wahed mahmoud| Petroget |
+--------------+------------------+
| samy shahen | Petroget |
+----+------+--+------------------+
| Mohamed gad | El Ahly |
+----+------+--+------------------+
| ehab zeyad | El Ahly |
+----+---------+------------------+
| moaz maged | El Ahly |
+--------------+------------------+
| mazen mahmod | El Ahly |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)
在这个例子中,2 groups of **ANY WORD**因为它的a 6 group和把它们放在8不可变的组中,它们在4或8或16或32或64或128或256数字中找到......并且在相邻的2 **ANY WORD**或2之间没有相邻的club_name
例子 :
4名球员作为一名球员
如果之后的结果select full_name,club_name from players where y_of_birth=2000是12玩家意味着12 players= 3 groups因为每组都有4玩家下一步打印**ANY WORD**4次(注意:**ANY WORD**是这些组中的一个)在3组之间,所以输出将是这样的:
+----+------+---------------------+
| full_name | club_name |
+--------------+------------------+
| Ahmed Sayed | El Ahly |
+--------------+------------------+
| Kareem Gaber | El Ahly |
+--------------+------------------+
| Maher Zein | El Ahly |
+--------------+------------------+
| Mohab Saeed | El Ahly |
+----+------+--+------------------+
| ahmed shawky | Petroget |
+--------------+------------------+
| shaker ali | Petroget |
+--------------+------------------+
| omar Saed | Petroget |
+--------------+------------------+
| moataz Gamal | Petroget |
+------+-------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| gamel kamel | El Ahly |
+--------------+------------------+
| omar galal | El Ahly |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)
结论:
4 8 16 32 64 128 256 是不可变的群体
group 4应该填写16玩家**ANY WORD**之间没有相邻的东西:
+----+------+---------------------+
| full_name | club_name |
+--------------+------------------+
| Ahmed Sayed | El Ahly |
+--------------+------------------+
| Kareem Gaber | El Ahly |
+--------------+------------------+
| Maher Zein | El Ahly |
+--------------+------------------+
| Mohab Saeed | El Ahly |
+----+------+--+------------------+
| ahmed shawky | Petroget |
+--------------+------------------+
| shaker ali | Petroget |
+--------------+------------------+
| omar Saed | Petroget |
+--------------+------------------+
| moataz Gamal | Petroget |
+------+-------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| gamel kamel | El Ahly |
+--------------+------------------+
| omar galal | El Ahly |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)
group 8应该填写32玩家**ANY WORD**之间没有相邻的东西:
+----+------+---------------------+
| full_name | club_name |
+--------------+------------------+
| Ahmed Sayed | El Ahly |
+--------------+------------------+
| Kareem Gaber | El Ahly |
+--------------+------------------+
| Maher Zein | El Ahly |
+--------------+------------------+
| Mohab Saeed | El Ahly |
+----+------+--+------------------+
| ahmed shawky | Petroget |
+--------------+------------------+
| shaker ali | Petroget |
+--------------+------------------+
| omar Saed | Petroget |
+--------------+------------------+
| moataz Gamal | Petroget |
+------+-------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| husein mazen | Cocorico |
+--------------+------------------+
| hassan maged | Cocorico |
+--------------+------------------+
| maged ahmoud | Cocorico |
+--------------+------------------+
| zakareya gad | Cocorico |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| gamel kamel | El Ahly |
+--------------+------------------+
| omar galal | El Ahly |
+--------------+------------------+
| Kamal saber | El Ahly |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| **ANY WORD** | |
+--------------+------------------+
| khaled zein | Petroget |
+--------------+------------------+
| shady sameer | Petroget |
+--------------+------------------+
| wahed mahmoud| Petroget |
+--------------+------------------+
| samy shahen | Petroget |
+----+------+--+------------------+
| Mohamed gad | El Ahly |
+----+------+--+------------------+
| ehab zeyad | El Ahly |
+----+---------+------------------+
| moaz maged | El Ahly |
+--------------+------------------+
| mazen mahmod | El Ahly |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)
等等
group 16
group 32
group 64
group 128
group 256
编辑:
我收到了Gordon Linoff的询问
select p.*
from (select p.*,
(@rn := if(@c = club_name, @rn + 1,
if(@c := club_name, 1, 1)
)
) as seqnum
from players p cross join
(select @c := '', @rn := 0) params
order by club_name
) p
order by floor((seqnum - 1) / 4), club_name
Run Code Online (Sandbox Code Playgroud)
结合数据过滤后:
select p.*
from (select p.full_name,club_name,
(@rn := if(@c = club_name, @rn + 1,
if(@c := club_name, 1, 1)
)
) as seqnum
from players p cross join
(select @c := '', @rn := 0) params WHERE `y_of_birth` LIKE N'%2000%'
order by club_name
) p
order by floor((seqnum - 1) / 4), club_name
Run Code Online (Sandbox Code Playgroud)
输出类似的东西:
+----+------+---------------------+
| full_name | club_name |
+--------------+------------------+
| Ahmed Sayed | El Ahly |
+--------------+------------------+
| Kareem Gaber | El Ahly |
+--------------+------------------+
| Maher Zein | El Ahly |
+--------------+------------------+
| Mohab Saeed | El Ahly |
+----+------+--+------------------+
| kamal mado | Cocorico |
+--------------+------------------+
| hossam magdy | Cocorico |
+--------------+------------------+
| sayed ammar | Cocorico |
+--------------+------------------+
| karem gad | Cocorico |
+--------------+------------------+
| Mohamed gad | El Ahly |
+----+------+--+------------------+
| ehab zeyad | El Ahly |
+----+---------+------------------+
| moaz maged | El Ahly |
+--------------+------------------+
| mazen mahmod | El Ahly |
+--------------+------------------+
| shaker ali | Petroget |
+--------------+------------------+
| omar Saed | Petroget |
+--------------+------------------+
| moataz Gamal | Petroget |
+--------------+------------------+
| gamael zayed | Petroget |
+--------------+------------------+
| husein mazen | Cocorico |
+--------------+------------------+
| mazen kamal | Cocorico |
+--------------+------------------+
| maged ahmoud | Cocorico |
+--------------+------------------+
| mesho kareem | Cocorico |
+--------------+------------------+
| mano mazen | Petroget |
+--------------+------------------+
| shady srour | Petroget |
+--------------+------------------+
| mamdouh gamal| Petroget |
+--------------+------------------+
| khaled zein | Petroget |
+--------------+------------------+
| husein mazen | Cocorico |
+--------------+------------------+
| hassan maged | Cocorico |
+--------------+------------------+
| maged ahmoud | Cocorico |
+--------------+------------------+
| zakareya gad | Cocorico |
+--------------+------------------+
| shady sameer | Petroget |
+--------------+------------------+
| wahed mahmoud| Petroget |
+--------------+------------------+
| samy shahen | Petroget |
+----+------+--+------------------+
| abdo samy | Petroget |
+----+------+--+------------------+
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 !
我读过你的上一篇文章和这篇文章。如果我明白了这个想法,基本的事情就是你有球队,你有球员,你想以某些标准化分组(可以这么说)显示数据。
嗯,有一个恒定的数据,您总是要与该数据进行比较,即团队的规模。
我要做的是创建一个子查询,将球队与球员数量分组,并以某种方式使用它,如下所示:
select t.*
, x.total_players
-- , row_number() over(order by t.team_name) row_id
from team_table t
join (
select team_id
, count(1) total_playerss
from team_table
group by team_id
) x on x.team_id = t.team_id
order by t.team_name
Run Code Online (Sandbox Code Playgroud)
当在 PHP 中回显结果集时,您可以构建一些函数,例如:
<?php
function add_some_word($playerCount) {
if ($playerCount >4 && $playerCount <= 8) {
echo '*** SOME WORD***';
echo '*** SOME WORD***';
echo '*** SOME WORD***';
}
else if ($playerCount >4 && $playerCount <= 8) {
echo '*** SOME WORD***';
echo '*** SOME WORD***';
}
// etc.
}
?>
Run Code Online (Sandbox Code Playgroud)
使用row_id结果集中的 ,您可以看到团队何时开始和结束。
因此,当它吐出行时,可能会是这样的:”
<?php
$currentTeamName = "";
while ($row = pg_fetch_array($result,null,PGSQL_ASSOC)) {
// echo data you would normally send out
if ($currentTeamName != $row['team_name']) {
add_some_word($row['total_players']);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我希望我答对了你的问题。我正在快速完成这个任务,但我认为这会有所帮助!